使用linq在列表中去除重复项。

388

我有一个名为Items的类,它包含属性(Id、Name、Code、Price)

Items列表中存在重复的条目。

例如:

1         Item1       IT00001        $100
2         Item2       IT00002        $200
3         Item3       IT00003        $150
1         Item1       IT00001        $100
3         Item3       IT00003        $150

如何使用linq在列表中去除重复项?


我在Items类中有另一个类作为属性。 - Prasad
你也可以这样做 var set = new HashSet<int>(); var uniques = items.Where(x => set.Add(x.Id));。这样做应该是违法的。 - nawfal
我同意,应该使用ForEach :) - Michael Fulton
11个回答

-1

当您不想编写IEqualityComparer时,可以尝试以下内容。

 class Program
{

    private static void Main(string[] args)
    {

        var items = new List<Item>();
        items.Add(new Item {Id = 1, Name = "Item1"});
        items.Add(new Item {Id = 2, Name = "Item2"});
        items.Add(new Item {Id = 3, Name = "Item3"});

        //Duplicate item
        items.Add(new Item {Id = 4, Name = "Item4"});
        //Duplicate item
        items.Add(new Item {Id = 2, Name = "Item2"});

        items.Add(new Item {Id = 3, Name = "Item3"});

        var res = items.Select(i => new {i.Id, i.Name})
            .Distinct().Select(x => new Item {Id = x.Id, Name = x.Name}).ToList();

        // now res contains distinct records
    }



}


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

    public string Name { get; set; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接