我想对列表中的所有项目进行计数(如果值是true,则计算假值)。
我有这个:
Items.GroupBy(
i => i.ItemID,
i => new { isScheduled = i.isScheduled },
(key, g) => new ItemStatistics()
{
ItemID = key,
ScheduledItems = g.Count(g=>g.isScheduled),
UnscheduledItems = g.Count(g=> !g.isScheduled)
}).ToList();
这给了我以下编译错误:
无法将Lambda表达式转换为Type
'System.Collections.Generic.IEqualityComparer',因为它不是
委托类型
好像它期望不同的方法重载
当我这样做时,一切似乎都很好...
Items.GroupBy(
i => i.ItemID,
i => new { isScheduled = i.isScheduled },
(key, g) => new ItemStatistics()
{
ItemID = key,
ScheduledItems = g.Count(),
UnscheduledItems = g.Count()
}).ToList();
为什么当我从count方法中删除
g=> !g.isScheduled
表达式时会接受它呢? 最佳答案
找到了... ARGH!
当我可以使用“ g”作为组中内部lambda表达式的变量时,因为它指向原始组“ g”。所以我将g=>g.isScheduled
更改为i=>i.isScheduled
Items.GroupBy(
i => i.ItemID,
i => new { isScheduled = i.isScheduled },
(key, g) => new ItemStatistics()
{
ItemID = key,
ScheduledItems = g.Count(i=>i.isScheduled),
UnscheduledItems = g.Count(i=> !i.isScheduled)
}).ToList();
现在一切都很好
关于c# - LINQ Group by和“if-if”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18555860/