2016-10-16 12 views
0

は、私は私が引くしようとしていますLINQのは、平等のためのリストを比較し、より大きい

典型的なシナリオをCSHARPとLINQを使用して2つのリストを比較しようとしています

  1. チェックが最初のリストの値が値に等しい場合です2番目のリストに表示されます。違いがない場合は何ですか? (linqで交わって失敗しました)
  2. 第2リストの値が最初のリストの値よりも大きいかどうかをチェックします。つまり、最初のリスト= 2番目のリストと2番目のリストは最初のリストよりも余分な値を持ちます。

    class Program 
    { 
        static void Main(string[] args) 
        { 
         List<Student> studentsSrcList = new List<Student>(); 
    
         Student s1 = new Student(); 
         s1.Name = "john1"; 
         s1.Address = "milwaukee1"; 
         s1.Phone = 1061; 
    
         studentsSrcList.Add(s1); 
    
         Student s2 = new Student(); 
         s2.Name = "john2"; 
         s2.Address = "milwaukee2"; 
         s2.Phone = 1062; 
    
         studentsSrcList.Add(s2); 
    
         List<Student> studentDestinationList = new List<Student>(); 
    
         Student s3 = new Student(); 
         s3.Name = "john1"; 
         s3.Address = "milwaukee1"; 
         s3.Phone = 1061; 
    
         studentDestinationList.Add(s3); 
    
         Student s4 = new Student(); 
         s4.Name = "john3"; 
         s4.Address = "milwaukee2"; 
         s4.Phone = 1064; 
    
         studentDestinationList.Add(s4); 
    
         Student s5 = new Student(); 
         s5.Name = "john5"; 
         s5.Address = "milwaukee5"; 
         s5.Phone = 1065; 
    
         studentDestinationList.Add(s5); 
    
         var diff = studentDestinationList.Intersect(studentsSrcList); 
        } 
    } 
    
    class Student 
    { 
        public string Name { get; set; } 
        public string Address { get; set; } 
        public int Phone { get; set; } 
    } 
    

Iも試みVARデフ= studentsSrcList.SequenceEqual(studentsDestinationList)。

+0

宿題!!!!!!! –

+2

Esp。 2番目の要件* 2番目のリストの値が最初のリストの値より大きい*は、明確に定義されていません。また、あなたが試したものを教えても、それが(明らかに)期待通りにうまくいかなかった理由は分かりません。 –

答えて

1

生徒クラスのオブジェクトがいつ等しいかを定義したり、それらを比較する方法を定義する必要があります。

これは、クラスStudentにIComparableインターフェイスを実装させたり、クラスStudentにEqualsおよびGetHashCodeメソッドをオーバーライドさせることによって行うことができます。これは動作するはずです最初のもののために

var diff = studentDestinationList.Count(x => !studentsSrcList.Contains(x)); 
1

リファレンスタイプのインスタンスを比較すると、デフォルトでは、コンテンツではなく参照が比較されます。あなたの例では、s1とs3は異なるインスタンスなので、等しくはありません。

StudentクラスのEqualsメソッドをオーバーライドしたり、クラス内の値を比較するためにIEquatableインターフェイスを実装することができます。

0

、(第2:AdditionalyあなたはこれがあなたにstudentDestinationListにあるがstudentsSrcListではないオブジェクトのカウントを与える、あなたのオブジェクトを比較する方法を持って

1)は、時計で

List<Student> a = (from list1 in studentDestinationList 
        from list2 in studentsSrcList 
        where list1.Name == list2.Name && list1.Phone == list2.Phone && list1.Address == list2.Address 
        select list1).ToList(); 

結果、明らかではないが、 enter image description here

ホーpeヘルプ、

関連する問題