从c#中的List中删除具有重复属性的对象

时间:2016-09-27 14:15:51

标签: c# asp.net list

我有一个列表,我想创建一个没有重复值记录的新列表

public List<links> results = new List<links>();
public List<links> final_results = new List<links>();
public class links
{
    public string url { get; set; }
    public string title { get; set; }
    public string description { get; set; }
    public int place { get; set; }
}

结果在代码中获取它的值。唯一 Place 属性可能会出现相同的记录,但其他属性相同。我想省略在网址,标题和说明中具有重复值的重复记录。 我写了这段代码但没有改变:

     final_results = results .GroupBy(n => n.url).Select(g => g.FirstOrDefault()).ToList();

但是当我将我的重复器绑定到这个新列表时,没有任何改变。 我怎么能省略这个重复值?

3 个答案:

答案 0 :(得分:5)

如果要在3个属性urltitledescription中取消相等的记录,则必须按所有这些记录进行分组:

final_results = results.GroupBy(n => new {n.url, n.description, n.title})
                       .Select(g => g.FirstOrDefault()).ToList();

答案 1 :(得分:0)

嗯,你可以这样做:

var results = results.DistinctBy(x=> x.url);

或者如果您想要多个字段排除,最简单的是:

var results = results.DistinctBy(x=> x.url + "," + x.title + "," + x.description);

如果你想正确地做 - 只需覆盖对象的Equal和GetHashCode方法,并将你的值放在HashSet中。

要使DistinctBy正常工作,您可以增加.NET版本或只使用MoreLINQ。

答案 2 :(得分:0)

尝试在链接

上使用Except扩展方法
final_results = results.Except(--duplicate criteria--)