我想对列表中的所有项目进行计数(如果值是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/

10-17 02:22