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