我有以下对象列表:
{
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#中实现此过滤例程的一种干净方法是什么?
答案 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
;