LINQ Group by和“count-if”

时间:2013-09-01 06:28:31

标签: c# asp.net-mvc linq grouping linq-to-objects

如果值为true并且计数为false值,我想计算列表中的所有项目。

我有这个:

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表达式时呢?

1 个答案:

答案 0 :(得分:3)

发现它...... 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();

现在一切都还好