Linq - Group,Sum和Max

时间:2014-10-03 02:28:53

标签: c# linq

我已经被这个问题困住了几天了。

如何按PartCode分组,获取描述的最大值/最小值或第一个值(具有相同部件代码的项目可能具有不同的描述),然后是其他字段的总和。我目前拥有的内容如下所示:

var lengths =
                from q in
                    (from p in partList
                     select new { p.PartCode, p.Description, p.Quantity, p.TotalMeter, p.PurchaseLength })
                group q by new { q.PartCode, q.Description, q.Quantity, q.TotalMeter, q.PurchaseLength } into g
                orderby g.Key.PartCode
                select new
                {
                    PartCode = g.Max(p => p.PartCode),
                    Description = g.Max(p => p.Description),
                    Quantity = g.Sum(p => p.Quantity),
                    TotalMeter = g.Sum(p => p.TotalMeter),
                    PurchaseLength = g.Sum(p => p.PurchaseLength)
                };

1 个答案:

答案 0 :(得分:1)

我在这里看到两个主要问题:

首先,你说你想通过PartCode进行分组,而是通过所有内容的组合进行分组。

另一个可能的问题是你在我只能假设是字符串集合时使用Max()。这不会失败,但它会按字母顺序选择最后的值(这是你想要的吗?)。

试试这个:

var lengths =
    from q in
        (from p in partList
        select new { p.PartCode, p.Description, p.Quantity, 
                     p.TotalMeter, p.PurchaseLength })
    group q by q.PartCode into g
    orderby g.Key
    select new
    {
        PartCode = g.First().PartCode,
        Description = g.First().Description,
        Quantity = g.Sum(p => p.Quantity),
        TotalMeter = g.Sum(p => p.TotalMeter),
        PurchaseLength = g.Sum(p => p.PurchaseLength)
    };

如果这不能解决您的问题,请告诉我们您的问题。