c#复杂对象比较

时间:2010-08-19 22:23:05

标签: c# ienumerable except

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不适用于复杂对象。

   List<SecurityMaster> list1 = new List<SecurityMaster>();
   List<SecurityMaster> list2 = new List<SecurityMaster>();

2 个答案:

答案 0 :(得分:2)

我猜你有两个IEnumerable<EntityObject>序列,并且想要知道如何使用Except,以便在特定条件下将两个EntityObjects视为相同。我将进一步猜测这些标准包含一个简单的规则(只是为了让我自己更容易提供这个答案):具有相同BondIdentifier属性的两个项目将被视为相同。

那么,请使用接受Except的{​​{1}}的重载:

IEqualityComparer<T>

即使我对标准的猜测是错误的,你仍然可以使用这个答案作为制定你自己的答案的基础。

如果我最初的猜测也是错误的,那么显然这个答案对你来说毫无用处。

答案 1 :(得分:1)

我不确定您的代码与任何内容有什么关系,但这里是您使用Except的方式:

var list1 = new int[] { 1, 2, 3 };
var list2 = new int[] { 1 };

var output = list1.Except(list2).First();

Console.WriteLine(output);  // prints "2"