如何从此列表中过滤出重复?

时间:2018-07-03 00:59:39

标签: c# .net linq

我有以下对象列表:

{
DomainName="my-corp-1",
GroupName="group-x",
Desription="my group x"
}

{
DomainName="my-corp-2",
GroupName="group-x",
Desription="my group x - follow up with admin"
}

{
DomainName = "my-corp-1",
GroupName="group-y",
Description="my group y"
}

如果两个域中都存在具有相同GroupName的对象,则应保留my-corp-1中存在的对象,并过滤出与my-corp-2相关联的具有相同GroupName的对象。

例如,在上面的对象列表中,应该删除列表中的第二个对象,因为第一个对象中的group-x已经存在GroupName。

在C#中实现此过滤例程的一种干净方法是什么?

1 个答案:

答案 0 :(得分:0)

干净的东西往往是个人喜好:)

我可能会按照GroupName对它们进行分组,然后从那里进行操作。通常最好将数据保留到绝对的最后一步。

// Get an IEnumerable of IGrouping with GroupName as key
var objectsGroupedByGroupName = myDomainList.GroupBy(d => d.GroupName);

// Recklessly throw away data and select only the first object in each grouping per GroupName
var listOfDomainsWithUniqueGroupNames = objectsGroupedByGroupName.Select(x => x.First());

如果只希望它更干净,则可以将它们组合在一起:

var myUniqueDomainsFromGroupName = myDomainList
    .GroupBy(d => d.GroupName) // Group domains by their group name
    .Select(x => x.First())  // Select the first entry for each group
    //.ToList() if you want a list back
    ;