1

我有这个 IEnumerable:

var collection = from obj in list
                        select new
                        {
                            Title = (string)obj.Element("title"),
                            otherAtt = (string)obj.Element("otherAtt"),
                            ..
                            ..
                            ..
                            ..
                        };

我想删除“集合”中具有重复标题的所有对象。并留下最后一个重复的。

例如:

collection = {
    {Title="aaa" ,otherAtt="1" ,....},
    {Title="bbb" ,otherAtt="2" ,....},
    {Title="aaa" ,otherAtt="3" ,....},
    {Title="aaa" ,otherAtt="4" ,....},
    {Title="ccc" ,otherAtt="5" ,....},
    {Title="bbb" ,otherAtt="6" ,....}
}

我需要过滤器使集合看起来像这样:

collection = {
    {Title="aaa" ,otherAtt="4" ,....},
    {Title="ccc" ,otherAtt="5" ,....},
    {Title="bbb" ,otherAtt="6" ,....}
}

谢谢。

4

2 回答 2

0

您可以使用Distinct()扩展方法,但您必须编写一个 IEqualityComparer 以便使用 Title 进行比较。

我认为这非常接近您的需要:http ://forums.asp.net/post/2276937.aspx

于 2012-04-27T17:19:22.497 回答
0

以下将起作用:

var noDuplicateTitles = collection
   .GroupBy(obj => obj.Title)
   .Select(group => group.Last())

所有具有相同标题的对象都被分组,我们从每个组中取出最后一个项目。

于 2012-09-02T19:19:40.967 回答