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