1

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

我有一个名为 Occurrences 的自定义类的列表,该类有两个属性 Code as String 和 Negative as Boolean。我正在尝试获取代码的净总数(按代码分组),因此这将是 Negative = False(全部为正)的代码计数,减去 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
4

3 回答 3

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) }
于 2013-06-10T14:12:27.987 回答
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到相应的计数,计算为非负和负出现之间的差异。

于 2013-06-10T14:08:05.957 回答
0
Dim netTotal = From o In Occurrences
               Group By o.Code
               Into Sum(If(o.Negative, -1, 1))
于 2013-06-10T15:16:29.010 回答