私はList<PropA>
を持っています
PropA
{
int a;
int b;
}
および別のList<PropX>
PropX
{
int a;
int b;
}
ここで、List<PropX>
に一致するList<PropA>
から、lambdaまたはLINQを使用してbプロパティに一致するアイテムを見つける必要があります。
やりたいことは、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番目のコレクションを線形検索する単純な実装よりもかなり効率的にこの操作を実行するように記述されていることに注意してください。
ListA.Where(a => ListX.Any(x => x.b == a.b))
var commonNumbers = first.Intersect(second);
これにより、2つのリスト間で共通の値が得られ、結合またはその他のLambda式よりもはるかに高速でクリーンなアプローチが得られます。
やってみなよ。
ソース: [〜#〜] msdn [〜#〜]
複数のパラメーターがある場合、上記のすべてが機能しないので、これが最善の方法だと思います。
例:petsおよびpets2の一致しないアイテムを検索します。
var notMatchedpets = pets
.Where(p2 => !pets2
.Any(p1 => p1.Name == p2.Name && p1.age == p2.age))
.ToList();