Linq Count基于布尔值

时间:2013-06-10 14:00:52

标签: vb.net linq

我正在尝试运行一个我无法正确运行的linq查询。

我有一个名为Occurrences的自定义类列表,这个类有两个属性Code as String和Negative as Boolean。我试图得到代码的净总数(按代码分组)所以这将是Code的计数,其中Negative = False(全部为正),减去Code的计数,其中Negative = True(全部为负)。 Occurrences类中没有数量,每个事件计为1个负数或正数。

我尝试在3个单独的查询中执行此操作,这些查询无效,理想情况下我想在1个查询中执行此操作。

如果您需要更好的解释或我不清楚,请告诉我。

编辑:示例输入/输出

输入:

Code       Negative
-------------------
123        True
123        True
123        False
456        True
456        True
456        True
789        False
789        False

输出:

Code       Count
----------------
123        -1
456        -3
789        +2

3 个答案:

答案 0 :(得分:2)

from item in data
group item by item.Code into g
select new { Code = g.Key, Count = g.Sum(x => x.Negative ? -1 : 1) }

答案 1 :(得分:1)

您可以尝试直接将您的解释翻译成LINQ,如下所示:

var totalByCode = data
    .GroupBy(item => item.Code)
    .ToDictionary(
         g => g.Key
    ,    g => g.Count(o => !o.Negative) - g.Count(o => o.Negative)
    );

这会产生Dictionary<string,int>,将Code映射到相应的计数,计算为非负数和负数之间的差异。

答案 2 :(得分:0)

Dim netTotal = From o In Occurrences
               Group By o.Code
               Into Sum(If(o.Negative, -1, 1))