[英]linq group by all properties [duplicate]
我有一个对象列表,需要找出重复的对象。
public class MyObject
{
public string A { get; set; }
public string B { get; set; }
public int C { get; set; }
}
var myObjectList = new List<MyObject>();
// ...
var duplicates = from myObject in myObjectList
group myObject by (myObject.A, myObject.B, myObject.C) into groupCounts
where groupCounts.Count() > 1
select groupCounts;
我的问题是:有没有一种快速的方法可以将所有公共属性放入by
子句? 如果MyObject
需要增加属性数量,则by
子句将以一长串结束。
我尝试用let
子句进行解构,但编译器给了我一些错误。
创建一个通用比较器:
public class MyObjectComparer : IEqualityComparer<MyObject>
{
public bool Equals(MyObject a, MyObject b)
{
var properties = a.GetType().GetProperties();
foreach (var prop in properties)
{
var valueOfProp1 = prop.GetValue(a);
var valueOfProp2 = prop.GetValue(b);
if (!valueOfProp1.Equals(valueOfProp2))
{
return false;
}
}
return true;
}
public int GetHashCode(MyObject item)
{
return item.A.GetHashCode();
}
}
并使用它:
var duplicates = myObjectList.GroupBy(t => t, new MyObject.MyObjectComparer()).Where(t => t.Count() > 1).Select(t => t.Key).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.