C# 筛选重复行
我这里有一段代码:C# 筛选重复行,c#,.net,linq,C#,.net,Linq,我这里有一段代码: 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
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);
}
});
var group=nongroup.GroupBy(x=>new)
{
x、 身份证,
x、 Col1,
x、 可乐
}).Select(x=>newmydbtable
{
Id=x.Key.Id,
VALUE=x.Sum(y=>y.VALUE),
Col1=x.Key.Col1,
Col2=x.Key.Col2
}).ToList();
//筛选出具有相同Col1/Col2组合的行
var dbTableList=新列表();
grouped.ForEach(x=>
{
如果(!dbTableList.Any(a=>a.Col1==x.Col2&&a.Col2==x.Col1))
{
dbTableList.Add(x);
}
});
我想删除注释“//过滤掉具有相同Col1/Col2组合的行”下的代码,并以某种方式将此功能添加到注释上方的LINQ语句中您就不能这样做吗
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();
还是我完全误解了你的问题?以前发生过:)我认为您正在查找
分组的列表的自定义不同值
class MyDbTableComparer : IEqualityComparer<MyDbTable>
{
public bool Equals(MyDbTable x, MyDbTable y)
{
if (x.Col1 == y.Col2 && x.Col2 == y.Col1) return true;
return false;
}
}
但是我不知道如果在ToList()
之前使用Distinct()
非分组.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分组)。这对您来说应该很好:
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)
组合。a.Col1==x.Col2
您应该将Col1
与Col1
比较ToList()之前为什么不调用Distinct()
的可能重复项
?它尤其适用于Select()中返回的自定义字段
。您需要Id
?因为您的逻辑实际上删除了不重复的行,因为它们具有不同的Id
。如果您不需要Id
,您可以完全删除它,并且不再有重复的行。您真的只想添加第一个Id(及其总和)吗对于每个col组合,如果是这样的话,您可以仅按cols、Distinct()进行分组,并获取第一个ID和该ID的总和。
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();