我有一个列表,我想创建一个没有重复值记录的新列表
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();
但是当我将我的重复器绑定到这个新列表时,没有任何改变。 我怎么能省略这个重复值?
答案 0 :(得分:5)
如果要在3个属性url
,title
和description
中取消相等的记录,则必须按所有这些记录进行分组:
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--)