web-dev-qa-db-ja.com

別のリストに存在するリストからアイテムを見つける

私はList<PropA>を持っています

PropA  
{  
    int a;  
    int b;  
}

および別のList<PropX>

PropX  
{  
    int a;  
    int b;  
}

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

35
donstack

やりたいことは、2つのシーケンスJoinです。 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;

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

30
Servy
ListA.Where(a => ListX.Any(x => x.b == a.b))
64
Adrian Godong
var commonNumbers = first.Intersect(second); 

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

やってみなよ。

ソース: [〜#〜] msdn [〜#〜]

24
Ambuj

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

例:petsおよびpets2の一致しないアイテムを検索します。

var notMatchedpets = pets
    .Where(p2 => !pets2
    .Any(p1 => p1.Name == p2.Name && p1.age == p2.age))
    .ToList();
6
Sachin Prasad