-4
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 except メソッドは、複雑なオブジェクトでは機能しません。

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

2 に答える 2

2

2 つのシーケンスがあり、特定の基準の下で2 つを同一として扱うIEnumerable<EntityObject>方法を知りたいと思います。これらの基準は 1 つの単純なルールで構成されているとさらに推測します (この回答を簡単に提供できるようにするためです): 同じプロパティを持つ 2 つのアイテムは同一と見なされます。ExceptEntityObjectsBondIdentifier

それでは、次の値Exceptを受け入れるオーバーロード for を使用しIEqualityComparer<T>ます。

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());

基準に関する私の推測が間違っていたとしても、この回答を基礎として使用して、独自の基準を策定することができます.

私の最初の推測も間違っていた場合、明らかにこの答えは役に立たない.

于 2010-08-19T22:50:35.127 に答える
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"
于 2010-08-19T22:28:53.337 に答える