【发布时间】:2018-06-08 10:53:17
【问题描述】:
我这里有一段代码:
var grouped = nonGrouped.GroupBy(x => new
{
x.Id,
x.Col1,
x.Col2
}).Select(x => new MyDbTable
{
Id = x.Key.Id,
VALUE = x.Sum(y => y.Value),
Col1 = x.Key.Col1,
Col2 = x.Key.Col2
}).ToList();
//Filter out rows with the same Col1/Col2 combination
var dbTableList = new List<MyDbTable>();
grouped.ForEach(x =>
{
if (!dbTableList.Any(a => a.Col1 == x.Col2 && a.Col2 == x.Col1))
{
dbTableList.Add(x);
}
});
我想删除注释“//过滤掉具有相同 Col1/Col2 组合的行”下的代码,并以某种方式将此功能添加到注释上方的 LINQ 语句中
【问题讨论】:
-
a.Col1 == x.Col2你应该比较Col1和Col1 -
为什么不在
ToList()之前调用Distinct()?它应该特别适用于Select()中返回的自定义字段。 -
你需要
Id吗?因为您的逻辑实际上删除了不重复的行,因为它们具有不同的Id。如果你不需要Id,你可以完全删除它,你不会再有重复了 -
您是否真的只想为每个 col 组合添加第一个 id(及其 sum),如果是这样,您可以按 cols 分组仅,Distinct(),并取第一个 ID 和该 ID 的总和。