过滤数据时简化linq

时间:2013-08-20 15:47:04

标签: c# .net linq

我想问一下如何简化下面的foreach块的建议。我试图在一个linq声明中完成所有这些,但我无法弄清楚如何操纵"计数"查询中的值。

有关我想要实现的目标的更多细节: - 我有一个巨大的列表,其中包含潜在的重复项,其中Id重复,但属性" Count"是不同的数字 - 我想摆脱重复,但仍然不要放松那些"伯爵"值 - 所以对于具有相同Id的项目,我总结了" Count"特性

尽管如此,目前的代码并不漂亮:

var grouped = bigList.GroupBy(c => c.Id).ToList();
foreach (var items in grouped)
{
    var count = 0;
    items.Each(c=> count += c.Count);
    items.First().Count = count;
}
var filtered =  grouped.Select(y => y.First());

我不期待整个解决方案,也会非常感谢您的想法:)

2 个答案:

答案 0 :(得分:5)

鉴于你正在改变这个系列,我个人只会用计数制作一个新的“项目”:

var results = bigList.GroupBy(c => c.Id)
                     .Select(g => new Item(g.Key, g.Sum(i => i.Count)))
                     .ToList();

这会执行从原始Item个实例的新集合的简单映射,其中包含正确的IdCount值。

答案 1 :(得分:2)

var filtered = bigList.GroupBy(c=>c.Id)
                      .Select(g=> {
                                    var f = g.First();
                                    f.Count = g.Sum(c=>c.Count);
                                    return f;
                                  });