私は LINQ にかなり慣れていないので、ここで自分自身を隅に描いた可能性があります。2 つのリスト (左右) があり、次のことを行う必要があります。
a)特定のフィールドに基づいて一致するアイテムを取得する
b ) 右側に一致しないアイテムを左側に取得します
c ) 左側に一致しないアイテムを右側に取得します
特定のフィールドが等しい場合、一致が見つかります。他のフィールドには値が含まれる場合と含まれない場合がありますが、一致比較に影響を与えてはなりません。
アイテムを取得するには、両方のリストでaを実行しました。JOIN
var q = from a in r1
from b in r2
where a.Prop1 == b.Prop1 && a.Prop3 == b.Prop3
select new { a.Prop1, a.Prop2, b.Prop3 };
ここからどこへ行けばいいのかわからない。両方のリストの他のプロパティが異なり、比較が壊れる可能性があるため、使用できないと思います。.Except()
Left Join
また、一致しないアイテムを使用して取得しようとしました:
var q =
from c in r1
join p in r2 on c.Prop1 equals p.Prop1
into cp
from p in cp.DefaultIfEmpty()
select new { Prop1 = c.Prop1, Prop2 = p == null ? "N/A" : p.Prop2 };
ただし、複数のフィールドを比較して比較することはできないことがわかりました。
Left Join
LINQで複数のフィールドを持つことはできますか? 2 つのリストの違いを取得する他の方法 (LINQ 以外) はありますか?