4

我想就如何简化下面的 foreach 块征求建议。我试图在一个 linq 语句中完成所有操作,但我无法弄清楚如何在查询中操作“计数”值。

有关我要实现的目标的更多详细信息:-我有一个包含潜在重复项的巨大列表,其中 Id 重复,但属性“计数”是不同的数字-我想摆脱重复项,但仍不丢失那些“计数”值 - 所以对于具有相同 Id 的项目,我总结了“计数”属性

不过,当前的代码看起来并不漂亮:

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());

我不指望整个解决方案,一些想法也会受到高度赞赏:)

4

2 回答 2

5

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

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

这执行了从原始实例到新Item实例集合的简单映射,具有正确的IdCount值。

于 2013-08-20T15:51:59.113 回答
2
var filtered = bigList.GroupBy(c=>c.Id)
                      .Select(g=> {
                                    var f = g.First();
                                    f.Count = g.Sum(c=>c.Count);
                                    return f;
                                  });
于 2013-08-20T15:51:33.090 回答