2016-08-30 4 views
0

を使用して2つのリストの間で共通の要素を見つける:私は2つのリストを以下しているラムダ式

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"}, 
}; 

を、この2つのリストは、実行時に生成され、私はこのリストの両方からプログラムIDに応じて、共通のProgramInfoを選択する必要があります

例えば、上記の例の場合、出力は

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; } 
    } 

する必要があります誰かが、私はラムダ式を使用してこれを行うことができますどのように私をお勧めすることはできますか?

+0

それはタイプミスではなくわからないかもしれません:それはあなたのクラスを動作させるためには、あなたはまた、代わりの機能をオーバーライドするIEqualityComparerを指定することができEqualsGetHashCode

var thirdList = firstList.Intersect(secondList); 

を上書きする必要があります'secondList'と' thirdList'は上記リストのように '' text2''と '' text3''を意味しましたか? –

+1

私はここで多くの研究努力を見ているか分かりません... –

答えて

1

Linq .Intersectを使用してください。 - I `

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

ありがとう。私はIEqualityComparerについて考えなかった。 – App

+0

@App - クール:)もしあなたがこの問題を解決したとマークアップすることを検討してくださいupvoting :) –

関連する問題