有2个列表
List<Test> t1 = new List<Test>()
{
new Test("TestName", "MyProperty", 50),
new Test("TestName2", "MyProperty2", 50)
};
List<Test2> t2 = new List<Test2>()
{
new Test2
{
NameT2 = "TestName",
PropertyT2 = "MyProperty",
ValueT3 = 50
},
new Test2
{
NameT2 = "Hector",
PropertyT2 = "MyProperties",
ValueT3 = 60
}
};
我们如何比较两个不同复杂类型的列表,以接收true或false作为响应?
我试过
1.这两个列表都将有100列或更多列,因此普通的Linq查询不合适,因为我必须编写并比较所有100个属性或列。
2. *“IdaTransaction.POC.DotNetApps.Model.DataModel.Test2”不包含“名称”的定义 * 是异常。使用交集时
var compareL1 = t1.Intersect(t2,new DynamicComparer());
public class Test
{
public Test(string name, string property, int value)
{
Name = name;
Property = property;
Value = value;
}
public string Name { get; set; }
public string Property { get; set; }
public int Value { get; set; }
// public Test(string name, string property, int value)
//{
// Name = name;
// Property = property;
// Value = value;
//}
//public bool Equals(Test? other) => this.Name == other?.Name;
//public override int GetHashCode() => (Name).GetHashCode();
}
public class Test2
{
public string NameT2 { get; set; }
public string PropertyT2 { get; set; }
public int ValueT3 { get; set; }
public int AdditionalT4 { get; set; }
}
public class DynamicComparer : IEqualityComparer<object>
{
public bool Equals(dynamic x, dynamic y)
{
return x.Name == y.Name && x.Age == y.Age;
}
public int GetHashCode(dynamic obj)
{
return ((string)obj.Name).GetHashCode() * 31
+ ((int)obj.Age).GetHashCode();
}
}
1条答案
按热度按时间hc2pp10m1#
所以你想知道两个列表是否包含“相同”的项目,并比较所有三个属性?是什么阻止了你这样做:
如果这不是你所需要的比较,你必须更好地解释你的需求,并展示你已经尝试过的。