是否有一个LINQ查询,它会给我几个最大值的总和?

时间:2010-10-05 15:11:52

标签: c# linq

我有几个地点的交易数据表,我需要从一个位置子集中找到每个位置的最大值。想象一下下表:

location  year  transactions
  123     2009      57
  124     2009      23
  125     2009      45
  123     2010      64
  124     2010      12
  125     2010      66

因此,如果我只关注位置123和124的数据,代码应该为2010年的位置123和2009年的位置124选择值64.

我有以下代码,它可以找到每个位置的最大值,然后将其添加到运行总计中。

int total = 0;

foreach (var location in locationIds)
{
    int? temp = transactions.Where(t => t.Location == location)
                            .Max(t => t.Transactions);
    if (temp.HasValue)
    {
        total += temp.Value;
    }
}

有更优雅的编码方式吗?

2 个答案:

答案 0 :(得分:8)

我正在使用您上面示例中表格中使用的命名。从您的代码判断,您可能需要相应地更改一些名称......但我不能肯定:

var locationsToInclude = new List<int> { 123, 124 };

var sum = transaction
    .Where(t => locationsToInclude.Contains(t.location))
    .GroupBy(t => t.location)
    .Sum(g => g.Max(t => t.transactions));

答案 1 :(得分:2)

  

这适用于所有地点。我只是   想要获得子集的值。

然后对Justin's answer的这个小修改怎么样?

var sum = transaction
    .GroupBy(x => x.Location)
    .Where(g => locationIds.Contains(g.Key))
    .Sum(g => g.Max(x => x.Transactions));