我这里有一段代码:
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语句
答案 0 :(得分:0)
你不能这样做吗?
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
}).Where(z => z.Col1 != z.Col2).ToList();
还是我完全误解了你的问题?它发生在以前:)
答案 1 :(得分:0)
我认为您正在寻找grouped
列表
class MyDbTableComparer : IEqualityComparer<MyDbTable>
{
public bool Equals(MyDbTable x, MyDbTable y)
{
if (x.Col1 == y.Col2 && x.Col2 == y.Col1) return true;
return false;
}
}
之后,将上层语句改为:
.Select(x => new MyDbTable
{
Id = x.Key.Id,
VALUE = x.Sum(y => y.Value),
Col1 = x.Key.Col1,
Col2 = x.Key.Col2
}).ToList().Distinct(new MyDbTableComparer());
但我不知道如果您在Distinct()
之前使用ToList()
答案 2 :(得分:0)
nonGrouped.GroupBy(x => new { x.Col1, x.Col2 }).Where(group => !group.Take(1).Any()).SelectMany(group => group).GroupBy(x => x.Id, x.Col1,x.Col2);
可能有用。
不知道为什么你这里的逻辑是什么(为什么如果你想要删除所有具有相同col1和col2的行,为什么需要按Id,Col1和Col2分组。
答案 3 :(得分:0)
这应该很适合你:
var dbTableList =
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
})
.GroupBy(x => new
{
x.Col1,
x.Col2
})
.SelectMany(xs => xs.Take(1))
.ToList();
完成此项工作的关键是GroupBy
/ SelectMany
/ Take(1)
组合。