如何在具有两个以上字段的对象上使用Linq返回两个字段?

时间:2016-07-12 19:28:38

标签: c# linq

我想要做的是我在MySQL中常见的一种方法,即选择所有一个字段不同,以及该数据子集中另一个字段的总和,用于每个唯一/不同的结果。

以下内容应该复制一些简单易用的东西,以便查看我的意思数据类型:

public class Stock {
   public int id {get;set;}
   public int count {get;set;}
   public string location {get;set;}
   public Stock() { }
}

public class Foo {

   public void Bar() {
        List<Stock> Stocks = new List<Stock>()
        {
            new Stock
            {
                id = 137829,
                count = 5,
                location = "Ottawa"
            },
            new Stock
            {
                id = 137829,
                count = 27,
                location = "Toronto"
            },
            new Stock
            {
                id = 137830,
                count = 8,
                location = "Toronto"
            }

        };

        var result = Stocks.DistincyBy( s => s.id);
   }
}

我想在result中存储的内容如下(使用此代码作为示例。实际项目结构更复杂)。

  • id = 137829,count = 32
  • id = 137830,count = 8

我知道我可以使用.Sum(),但在这种情况下,我想总结一个字段的区别。如何实现(我更喜欢我的Linq是内联语法而不是sql样式查询)

1 个答案:

答案 0 :(得分:2)

使用GroupBy获取不同的分组,然后Select进入对象。例如:

var result = Stocks.GroupBy(s => s.Id).Select(g => new 
{
   Id = g.Key,
   Count = g.Sum(i => i.Count)
};

最好是创建一个要选择的命名类,但语法非常相似。