我有两个从数据库中获取的对象数组,有些重叠,所以我必须制作一个独特的函数.
我试图制作一个lambda表达式,但我仍然有一个重叠的对象.
这是我的代码:
ArtObject[] pinui = new ArtObject[root.Count - 1];
ArtObject[] c1= new ArtObject[root2.Count - 1];
pinui = getArticlesArray(root2, pinui);
c1= getArticlesArray(root, c1);
art = new ArtObject[c1.Count()+pinui.Count()];
pinui.CopyTo(art, 0);
c1.CopyTo(art, pinui.Count());
art = art.Distinct().OrderByDescending(a => a.dateTosort).ToArray();
Run Code Online (Sandbox Code Playgroud)
我觉得我的最后一行出了问题,art = art.Distinct().OrderByDescending(a => a.dateTosort).ToArray();我想知道什么,怎么才能得到不同的对象..?
Distinct将使用Equals和GetHashCode确定相等的值.我怀疑你没有覆盖这些方法来表明你希望如何检查相等性.
另请注意,您的最后一部分将更简单:
ArtObject[] art = pinui.Union(c1).OrderByDescending(a => a.dateTosort).ToArray();
Run Code Online (Sandbox Code Playgroud)
a.Union(b)相当于a.Concat(b).Distinct().
一种替代覆盖GetHashCode和Equals是指定的IEqualityComparer<Person>,以任一Union或Distinct.
使用DistinctBy方法,MoreLINQ使这更容易:
var query = collection.DistinctBy(x => x.Description);
Run Code Online (Sandbox Code Playgroud)
(目前还没有相应的Union,但我们可以轻松添加一个.)