提取具有特定属性值的项目

时间:2014-11-19 14:43:30

标签: c# linq

使用C#& linq,我希望将所有带有重复ID的项目放在一个列表中,将另一个列表放入具有唯一ID的项目。

我的初始列表

Id: 0 Name: ItemA
Id: 1 Name: ItemB
Id: 1 Name: ItemC
Id: 2 Name: ItemD
Id: 3 Name: ItemE
Id: 3 Name: ItemF
Id: 4 Name: ItemG
Id: 5 Name: ItemH

我想要一个列表:

Id: 0 Name: ItemA
Id: 1 Name: ItemB
Id: 2 Name: ItemD
Id: 3 Name: ItemE
Id: 4 Name: ItemG
Id: 5 Name: ItemH

另一个列表:

Id: 1 Name: ItemC
Id: 3 Name: ItemF

1 个答案:

答案 0 :(得分:3)

对于这个问题,我会选择非linq解决方案。

void Main()
{
    var list = new List<Item>()
    {
        new Item(){Id= 0, Name= "ItemA"},
        new Item(){Id= 1, Name= "ItemB"},
        new Item(){Id= 1, Name= "ItemC"},
        new Item(){Id= 2, Name= "ItemD"},
        new Item(){Id= 3, Name= "ItemE"},
        new Item(){Id= 3, Name= "ItemF"},
        new Item(){Id= 4, Name= "ItemG"},
        new Item(){Id= 5, Name= "ItemH"}
    };

    var set = new HashSet<int>();
    var unique = new List<Item>();
    var dupes = new List<Item>(); 
    foreach (var item in list)
    {
        if(set.Add(item.Id))
            unique.Add(item);
        else
            dupes.Add(item);
    }
}

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

linq实现可能如下所示:

var unique = list.GroupBy(x => x.Id).Select(x => x.First());
var dupes = list.Except(unique);