LINQ Group by and "count-if"

本文关键字:quot count-if and Group by LINQ | 更新日期: 2023-09-27 18:29:51

如果一个值为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表达式转换为类型"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();

为什么当我从计数方法中删除g=> !g.isScheduled表达式时,它会接受它?

LINQ Group by and "count-if"

找到了。。。啊!

当我可以使用"g"作为组内部lambda表达式的变量时,becuse指的是原始组"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();

现在一切都好了