Vb.net 基于布尔运算的Linq计数
我正在尝试运行一个linq查询,但无法正确执行 我有一个名为“引用”的自定义类的列表,这个类有两个属性:字符串和布尔值。我试图得到代码的净总数(按代码分组),因此这将是负=假(全部为正)的代码计数,减去负=真(全部为负)的代码计数。“事件”类中没有数量,每个事件计为1个负或正 我尝试在3个单独的查询中执行此操作,但都不起作用,理想情况下,我希望在1个查询中执行此操作 如果你需要更好的解释或者我不清楚,请告诉我 编辑:示例输入/输出 输入:Vb.net 基于布尔运算的Linq计数,vb.net,linq,Vb.net,Linq,我正在尝试运行一个linq查询,但无法正确执行 我有一个名为“引用”的自定义类的列表,这个类有两个属性:字符串和布尔值。我试图得到代码的净总数(按代码分组),因此这将是负=假(全部为正)的代码计数,减去负=真(全部为负)的代码计数。“事件”类中没有数量,每个事件计为1个负或正 我尝试在3个单独的查询中执行此操作,但都不起作用,理想情况下,我希望在1个查询中执行此操作 如果你需要更好的解释或者我不清楚,请告诉我 编辑:示例输入/输出 输入: Code Negative --------
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
您可以尝试将您的解释直接翻译为LINQ,如下所示:
var totalByCode = data
.GroupBy(item => item.Code)
.ToDictionary(
g => g.Key
, g => g.Count(o => !o.Negative) - g.Count(o => o.Negative)
);
这将生成一个
字典
,它将代码
映射到相应的计数,计算为非负和负事件之间的差异。如果您发布了您的尝试,可能会有所帮助-您最初尝试了什么?任何输入/输出示例?请对您的答案添加一些解释。这是最简单的答案为我工作。谢谢你也注意到了这个标签(VB.NET)
from item in data
group item by item.Code into g
select new { Code = g.Key, Count = g.Sum(x => x.Negative ? -1 : 1) }
Dim netTotal = From o In Occurrences
Group By o.Code
Into Sum(If(o.Negative, -1, 1))