C# 使用LINQ删除重复记录

C# 使用LINQ删除重复记录,c#,asp.net,linq,linq-to-entities,C#,Asp.net,Linq,Linq To Entities,我想使用linq对象删除重复记录。 我希望最终列表将包含最新日期的唯一记录。 我有以下清单 AId BId C(date) **1 2 24/5/2015** 3 6 24/5/2015 **1 2 23/5/2015** (Need To Remove) 我想删除记录3 有什么建议吗?

我想使用linq对象删除重复记录。 我希望最终列表将包含最新日期的唯一记录。 我有以下清单

AId             BId           C(date)
**1              2               24/5/2015**
3                6               24/5/2015
**1              2               23/5/2015** (Need To Remove)
我想删除记录3


有什么建议吗?

首先找到重复的值,然后删除它们

  var DuplicateList = lst.GroupBy(x=>x)
              .Where(g=>g.Count()>1)
              .Select(y=>y)
              .ToList();
然后在列表上循环并删除每个副本中的一个

for (int i = OriginalList.Count - 1; i >= 0; i--)
  {
    if(DuplicateList.Exists(x=>x.BId == OriginalList[i].BId)
        OriginalList.RemoveAt(i)
  }
注 如果列表是
IEnumerable

因此,情况将有所改善

   if(DuplicateList.Any(x=>x.BId == OriginalList[i].BId)
            OriginalList.RemoveAt(i)

使用
GroupBy:

var unique1 = table1.AsEnumerable()
                       .GroupBy(x=>x.Field<string>("AId"))
                       .Select(g=>g.First());
var unique1=table1.AsEnumerable()
.GroupBy(x=>x.Field(“AId”))
.选择(g=>g.First());
然后,如果您在unique1中循环,将有一行带有“AId”**1
在这里,我们专门使用“AId”进行分组,因为在重复的行中,
日期不同

您可以使用
GroupBy
,然后
选择
使用
按降序
对日期进行排序

public class Item 
{
    public int Aid {get;set;}

    public int Bid {get;set;}

    public DateTime CDate {get;set;}
}

void Main()
{
    var items = new List<Item>
    {
        new Item { Aid = 1, Bid = 2, CDate = new DateTime(2015, 5, 24)},
        new Item { Aid = 3, Bid = 6, CDate = new DateTime(2015, 5, 24)},
        new Item { Aid = 1, Bid = 2, CDate = new DateTime(2015, 5, 23)},        
    };

    var result =  items.GroupBy(i => i.Aid)
                  .Select(group => 
                        new { Key = group.Key,
                              Items = group.OrderByDescending(x => x.CDate) })
                  .Select (g => g.Items.First());


    result.Dump();
}
公共类项目
{
公共int-Aid{get;set;}
公共整数Bid{get;set;}
公共日期时间CDate{get;set;}
}
void Main()
{
var items=新列表
{
新项目{Aid=1,Bid=2,CDate=new DateTime(2015,5,24)},
新项目{Aid=3,Bid=6,CDate=new DateTime(2015,5,24)},
新项目{Aid=1,Bid=2,CDate=new DateTime(2015,5,23)},
};
var result=items.GroupBy(i=>i.Aid)
.选择(组=>
新的{Key=group.Key,
Items=group.OrderByDescending(x=>x.CDate)})
.Select(g=>g.Items.First());
result.Dump();
}

Aid
Bid
列分组,并从每组中选择列日期最新的
C
项:

var result =  myTable.GroupBy(item => new {item.Aid, item.Bid})
                     .Select(group => group.OrderByDescending(item => item.C).First());