c#复杂对象比较 public类SecurityMaster:EntityObject { 公共字符串绑定标识符{get;set;} 公共字符串说明{get;set;} 公共EntityCollection SecurityMasterSchedules{get;set} } 公共类SecurityMasterSchedules:EntityObject { 公共字符串绑定标识符{get;set;} 公共十进制率{get;set;} 公共日期时间起始日期{get;set;} 公共日期时间结束日期{get;set;} }
如何比较对象列表列表1和列表列表2?IEnumerable Exception方法不适用于复杂对象c#复杂对象比较 public类SecurityMaster:EntityObject { 公共字符串绑定标识符{get;set;} 公共字符串说明{get;set;} 公共EntityCollection SecurityMasterSchedules{get;set} } 公共类SecurityMasterSchedules:EntityObject { 公共字符串绑定标识符{get;set;} 公共十进制率{get;set;} 公共日期时间起始日期{get;set;} 公共日期时间结束日期{get;set;} },c#,ienumerable,except,C#,Ienumerable,Except,如何比较对象列表列表1和列表列表2?IEnumerable Exception方法不适用于复杂对象 public class SecurityMaster : EntityObject { public string BondIdentifier { get; set; } public string Description { get; set; } public EntityCollection<SecurityMasterS
public class SecurityMaster : EntityObject
{
public string BondIdentifier { get; set; }
public string Description { get; set; }
public EntityCollection<SecurityMasterSchedules> SecurityMasterSchedules { get; set}
}
public class SecurityMasterSchedules :EntityObject
{
public string BondIdentifier { get; set; }
public decimal rate { get; set; }
public datetime startdate { get; set; }
public datetime endate { get; set; }
}
List list1=新列表();
List list2=新列表();
我不确定您的代码与任何东西有什么关系,但以下是您的使用方法:
我猜您有两个
IEnumerable
序列,并且您想知道如何使用除了
,在特定条件下将两个EntityObjects
视为相同。我将进一步猜测,这些标准包括一个简单的规则(只是为了让我在提供这个答案时更轻松):具有相同BondIdentifier
属性的两个项目将被视为相同
那么,除了接受IEqualityComparer
的之外,使用的重载:
类EntityObjectComparer:IEqualityComparer
{
公共布尔等于(EntityObject x,EntityObject y)
{
字符串xId=GetBondIdentifier(x);
字符串yId=GetBondIdentifier(y);
返回x等于(y);
}
私有字符串GetBondIdentifier(EntityObject obj)
{
var sm=作为证券主管的obj;
如果(sm!=null)
{
返回sm.BondIdentifier;
}
var sms=作为证券主计划的obj;
如果(sms!=null)
{
返回sms.BondIdentifier;
}
返回字符串。空;
}
}
List list1=GetList1();
List list2=GetList2();
var itemsInList1NotInList2=list1.Exception(list2,new EntityObjectComparer());
即使我对标准的猜测是错误的,你仍然可以根据这个答案来制定你自己的标准
如果我最初的猜测也是错误的,那么很明显,这个答案对您毫无用处。在您提供的代码中,我没有看到列表1、列表2或Except方法。。。。请澄清。
List<SecurityMaster> list1 = new List<SecurityMaster>();
List<SecurityMaster> list2 = new List<SecurityMaster>();
var list1 = new int[] { 1, 2, 3 };
var list2 = new int[] { 1 };
var output = list1.Except(list2).First();
Console.WriteLine(output); // prints "2"
class EntityObjectComparer : IEqualityComparer<EntityObject>
{
public bool Equals(EntityObject x, EntityObject y)
{
string xId = GetBondIdentifier(x);
string yId = GetBondIdentifier(y);
return x.Equals(y);
}
private string GetBondIdentifier(EntityObject obj)
{
var sm = obj as SecurityMaster;
if (sm != null)
{
return sm.BondIdentifier;
}
var sms = obj as SecurityMasterSchedules;
if (sms != null)
{
return sms.BondIdentifier;
}
return string.Empty;
}
}
List<EntityObject> list1 = GetList1();
List<EntityObject> list2 = GetList2();
var itemsInList1NotInList2 = list1.Except(list2, new EntityObjectComparer());