分组 - Linq到对象

时间:2009-06-10 23:45:37

标签: linq-to-objects

使用以下代码:

using System.Collections.Generic;
using System.Linq;

namespace SampleGrouping
{
internal class Program
{
    private static void Main(string[] args)
    {
        var sample = new List<Samples>
                                   {
                                       new Samples{ParameterID = 11,MaterialID = 855,ProductID   =  955,Quantity = 100},
                                       new Samples{ParameterID = 11,MaterialID = 855,ProductID   =  955,Quantity = 200},
                                       new Samples{ParameterID = 12,MaterialID = 856,ProductID   =  956,Quantity = 100},
                                       new Samples{ParameterID = 12,MaterialID = 856,ProductID   =  956,Quantity = 400}
                                   };
        // Result: Groupby ParameterID, MaterialID, ProductID
        // ParameterID = 11,MaterialID = 855,ProductID = 955,Quantity = 300
        // ParameterID = 12,MaterialID = 856,ProductID = 956,Quantity = 500

        var enumerable = from s in sample
                         group sample by new
                                             {
                                                 s.ParameterID,
                                                 s.MaterialID,
                                                 s.ProductID,

                                             };
    }
}

internal class Samples
{
    public int MaterialID { get; set; }
    public int ParameterID { get; set; }
    public int ProductID { get; set; }
    public int Quantity { get; set; }
}
}

如何实现结果:列为

ParameterID = 11,MaterialID = 855,ProductID = 955,Quantity = 300
  ParameterID = 12,MaterialID = 856,ProductID = 956,Quantity = 500

由于

1 个答案:

答案 0 :(得分:3)

按“s”分组,而不是“样本”。然后,您可以根据需要选择数据:

var enumerable =
    from s in sample
    group s by new
    {
        s.ParameterID,
        s.MaterialID,
        s.ProductID,
    } into GroupedSample
    select new
    {
        GroupedSample.Key.ParameterID,
        GroupedSample.Key.MaterialID,
        GroupedSample.Key.ProductID,
        TotalQuantity = GroupedSample.Sum(gs => gs.Quantity)
    };