从IEnumerable中删除对象

时间:2012-04-27 17:10:23

标签: c#-4.0 ienumerable

我有这个IEnumerable:

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

我想删除'collection'中具有重复Title的所有对象。并留下有重复的最后一个。

例如:

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" ,....}
}

感谢。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

以下内容可行:

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

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