c# – 告诉LINQ区分要返回的项目
发布时间:2020-12-15 23:55:05 所属栏目:百科 来源:网络整理
导读:我理解如何在IEnumerable上做一个Distinct()并且我必须为更高级的东西创建一个IEqualityComparer,但是有没有一种方法可以告诉哪个重复的项目要返回? 例如,假设你有一个List T ListMyClass test = new ListMyClass();test.Add(new MyClass {ID = 1,InnerID =
我理解如何在IEnumerable上做一个Distinct()并且我必须为更高级的东西创建一个IEqualityComparer,但是有没有一种方法可以告诉哪个重复的项目要返回?
例如,假设你有一个List< T> List<MyClass> test = new List<MyClass>(); test.Add(new MyClass {ID = 1,InnerID = 4}); test.Add(new MyClass {ID = 2,InnerID = 4}); test.Add(new MyClass {ID = 3,InnerID = 14}); test.Add(new MyClass {ID = 4,InnerID = 14}); 然后你做: var distinctItems = test.Distinct(new DistinctItemComparer()); class DistinctItemComparer : IEqualityComparer<MyClass> { public bool Equals(MyClass x,MyClass y) { return x.InnerID == y.InnerID;; } public int GetHashCode(MyClassobj) { return obj.InnerID.GetHasCode(); } } 此代码将返回ID为1和3的类.有没有办法返回ID匹配2& 4. 解决方法
您不希望区别 – 您希望根据ID对项目进行分组并为它们选择“最大”元素:
var distinctItems = test.Distinct(new DistinctItemComparer()); var otherItems = test.GroupBy(a => a.InnerID,(innerID,values) => values.OrderBy(b => b.ID).Last()); var l1 = distinctItems.ToList(); var l2 = otherItems.ToList(); l1 =您当前的列表l2 =您想要的清单 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |