我正在尝试运行一个我无法正确运行的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
答案 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))