0

可能重复:
使用 linq 删除列表中的重复项

我正在尝试从IQueryable集合中删除重复项。我在想我需要做某种嵌套选择,但我不太确定。我在 linqpad 中创建了一个脚本,其中包含展开和折叠的重复项目的原始列表。

我想要做的是从我的项目中选择listWithDuplicates不在dupesAsList. listWithDuplicates如果发现重复,我还想保留具有最高 id 的记录...

想知道是否有人可以帮助或告诉我删除重复项的最佳方法?

void Main()
{
    var listWithDuplicates = new List<Tuple<int,string>>();
    listWithDuplicates.Add(new Tuple<int,string>(1,"Dog"));
    listWithDuplicates.Add(new Tuple<int,string>(2,"Cat"));
    listWithDuplicates.Add(new Tuple<int,string>(3,"Dog"));
    listWithDuplicates.Add(new Tuple<int,string>(4,"Chicken"));
    listWithDuplicates.Add(new Tuple<int,string>(5,"Dog"));
    listWithDuplicates.Add(new Tuple<int,string>(6,"Dog"));
    listWithDuplicates.Add(new Tuple<int,string>(7,"Chicken"));

    var dupesAsList = listWithDuplicates.GroupBy(s => s.Item2).SelectMany(grp => grp.Skip(1));

    var dupesGrouped = listWithDuplicates.GroupBy(s => s.Item2).Where(x => x.Count() > 1).Select(x => x.Key);

    dupesAsList.Dump();

    dupesGrouped.Dump();
}

注意:我需要使用 lambda 表达式而不是查询语法来执行此操作!

4

0 回答 0