47

私はList<PropA>

PropA  
{  
    int a;  
    int b;  
}

そしてもう一つList<PropX>

PropX  
{  
    int a;  
    int b;  
}

ここで、ラムダまたはLINQを使用して、一致するbプロパティList<PropX>に存在するアイテムを見つける必要があります。List<PropA>

4

4 に答える 4

78
ListA.Where(a => ListX.Any(x => x.b == a.b))
于 2013-04-02T16:47:43.690 に答える
34

あなたがしたいのはJoin、2つのシーケンスです。LINQ には、Joinまさにそれを行う演算子があります。

List<PropX> first;
List<PropA> second;

var query = from firstItem in first
    join secondItem in second
    on firstItem.b equals secondItem.b
    select firstItem;

JoinLINQ の演算子は、各項目の 2 番目のコレクションを線形検索する単純な実装よりも、この操作をかなり効率的に実行するように記述されていることに注意してください。

于 2013-04-02T16:49:20.047 に答える
33
var commonNumbers = first.Intersect(second); 

これにより、2 つのリスト間で共通の値が得られます。これは、結合や他の Lambda 式よりもはるかに高速でクリーンなアプローチです。

やってみなよ。

出典:MSDN

于 2014-02-20T10:11:01.227 に答える
7

複数のパラメーターがある場合、上記のすべてが機能しないため、これが最善の方法だと思います。

例: ペット と ペット2 から一致しないアイテムを検索します。

var notMatchedpets = pets
    .Where(p2 => !pets2
    .Any(p1 => p1.Name == p2.Name && p1.age == p2.age))
    .ToList();
于 2014-04-05T19:57:59.757 に答える