2012-04-08 10 views
1

Ich habe den folgenden Codekommen zwei Listen unter der Bedingung

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace TestSomethingRelatedToLINQ 
{ 
    class Person : IEqualityComparer<Person> 
    { 
     internal int personID; 
     internal string PersonName; 


     public bool Equals(Person x, Person y) 
     { 
      return x.personID == y.personID; 
     } 
     public int GetHashCode(Person obj) 
     { 
      return obj.personID.GetHashCode(); 
     } 


    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<Person> list1 = new List<Person>{    
      new Person{personID = 1 , PersonName = "Ali"}, 
      new Person{personID = 2 , PersonName = "Ali1"}, 
      new Person{personID = 3 , PersonName = "Ali2"}    
      }; 

      List<Person> list2 = new List<Person>{    
      new Person{personID = 4 , PersonName = "Habib1"}, 
      new Person{personID = 2 , PersonName = "Habib2"}, 
      new Person{personID = 5 , PersonName = "Habib3"}    
      };   



     } 
    } 
} 

ich alle Elemente in list1 auswählen müssen, und alle das Element auf list2, die nicht personID in List1 hat existiert und bestellen dann das Ergebnis durch die personID

sollte die neue Ausgabe wie sein

1, Ali 
2, Ali1 
3, Ali2 
4, Habib1 
5, Habib3 

eine Ahnung, wie zu bedienen, dass

Antwort

2

Rufen Sie zuerst LINQ Concat an, so dass Sie Liste 2 an Liste 1 anhängen. Rufen Sie dann LINQ Distinct auf, wodurch die doppelt vorhandenen Einträge entfernt werden (entweder der erste oder der zweite).

This site schlagen Sie Klassen vor, die Sie verwenden, implementieren Sie einfach die IEqualityComparer-Schnittstelle.

+0

Vielen Dank für diesen Rat, ich habe mich in etwas geirrt, nachdem es sehr gut funktioniert hat – AMH