あなたはマルチフィールドを行うことができ、このようにLINQに参加:
var List1 = new List<Class1>();
List1.Add(new Class1 { Field1 = 1, Field2 = 2 });
List1.Add(new Class1 { Field1 = 3, Field2 = 4 });
var List2 = new List<Class2>();
List2.Add(new Class2 { Field1 = 1, Field2 = 2 });
List2.Add(new Class2 { Field1 = 5, Field2 = 6 });
var results = List1.Join(List2,
l1 => new {l1.Field1, l1.Field2},
l2 => new {l2.Field1, l2.Field2},
(l1, l2) => new {List1 = l1, List2 = l2});
キーここには2つのラムダl1 => new {l1.Field1, l1.Field2}
とl2 => new {l2.Field1, l2.Field2}
ています。これらは、興味のある両方のフィールドを含む各テーブルの行の匿名オブジェクトを作成します。結合は、匿名オブジェクトが等しいと比較された場合にのみ成功します。
「結合された」値として返されるオブジェクトを作成するだけで3番目のラムダが作成されます。どんな形状でも作成できますが、これはそれぞれのリストの一致する行を含む.Class1
と.Class2
というプロパティを持つオブジェクトを作成するだけです。必要ならばそれを平らにしたり、必要なプロパティを追加したりすることができます。
この構文の詳細については、MSDNのjoins using composite keysのページを参照してください。
私は、次の2スタンドインのクラスを使用:
class Class1
{
public int Field1 { get; set; }
public int Field2 { get; set; }
}
class Class2
{
public int Field1 { get; set; }
public int Field2 { get; set; }
}
A LINQPadファイルをhere可能です。
これは有効なSQLクエリではありません –
これはちょうどJOIN部分ですか?クエリ全体を投稿する必要があります。 – dpdragnev
私はちょうど残りの部分をカットして、私はその行が必要だと知っています –