2016-08-30 1 views
0

Ich habe folgende zwei Liste:Suche nach gemeinsamen Elementen zwischen zwei Liste mit Lambda-Ausdruck

var firstList = new List<ProgramInfo>() 
{ 
    new ProgramInfo {Name = "A", ProgramId = 1, Description = "some text1"}, 
    new ProgramInfo {Name = "C", ProgramId = 2, Description = "some text2"}, 
    new ProgramInfo {Name = "D", ProgramId = 3, Description = "some text3"}, 
    new ProgramInfo {Name = "E", ProgramId = 4, Description = "some text4"} 
}; 

var secondList = new List<ProgramInfo>() 
{ 
    new ProgramInfo {Name = "C", ProgramId = 2, Description = "some text1"}, 
    new ProgramInfo {Name = "D", ProgramId = 3, Description = "some text2"}, 
}; 

diese beide Liste wird zur Laufzeit generiert und ich habe die gemeinsame Programinfo wählen auf der Programm-ID von beiden dieser Liste abhängig

zum Beispiel bei obigen Beispiel sollte die Ausgabe sein

var thirdList = new List<ProgramInfo>() 
{ 
    new ProgramInfo {Name = "C", ProgramId = 2, Description = "some text1"}, 
    new ProgramInfo {Name = "D", ProgramId = 3, Description = "some text2"}, 
}; 

    public class ProgramInfo 
    { 
    public string Name { get; set; } 
    public int ProgramId { get; set; } 
    public string Description { get; set; } 
    } 

kann mir jemand vorschlagen, wie kann ich dies mit Lambda-Ausdruck zu tun?

+0

Es könnte ein Tippfehler, aber nicht sicher sein - ich die ' secondList' und 'thirdList' meinten Sie' 'text2 '' und '' text3 '' wie in den obigen Listen? –

+1

Nicht sicher, ich sehe viel Forschungsaufwand hier ... –

Antwort

1

Verwenden Sie Linq .Intersect. Für die Klasse zu arbeiten, muss der Equals und GetHashCode

var thirdList = firstList.Intersect(secondList); 

Sie auch eine IEqualityComparer angeben können außer Kraft zu setzen, anstatt die Funktionen des überwiegenden:

public class Comparer : IEqualityComparer<ProgramInfo> 
{ 
    public bool Equals(ProgramInfo x, ProgramInfo y) 
    { 
     return x.Name == y.Name && 
      x.ProgramId == y.ProgramId && 
      x.Description == y.Description; 
    } 

    public int GetHashCode(ProgramInfo obj) 
    { 
     return obj.Name.GetHashCode()^
      obj.ProgramId.GetHashCode()^
      obj.Description.GetHashCode(); 
    } 
} 

var thirdList = firstList.Intersect(secondList, new Comparer()); 
+0

vielen Dank. Ich habe nicht an IEqualityComparer gedacht. – App

+0

@App - Cool :) Wenn Sie das hilfreich fanden, betrachten Sie bitte die Markierung als gelöst und upvoting :) –

Verwandte Themen