2017-01-09 21 views
0

多くの外部結合を使用してSQLクエリをLinqに書き直そうとするのは苦労します。多くの外部結合がSQLからLINQへ

これはクエリです:

select on1.diskpath as d1, 
on2.diskpath as d2, 
of1.diskpath as d3, 
of2.diskpath as d4, 
on1.disknaam as n1, 
on2.disknaam as n2, 
of1.disknaam as n3, 
of2.disknaam as n4 
from tblstoragelocation 
left join tblstoragedisks on1 on online1=on1.id 
left join tblstoragedisks on2 on online2=on2.id 
left join tblstoragedisks of1 on offline1=of1.id 
left join tblstoragedisks of2 on offline2=of2.id where md5='xxx'"; 

私は、これはその一つであるが、それは多くのエラーを与え、多くのことを試してみました:(LOCはすでに宣言されて、型推論がgroupjoinに失敗し、online2が見つかりませんでした)

from loc in fdc.tblStoragelocations 
join _on1 in fdc.tblStoragedisks on loc.online1 equals _on1.id into on1 
from _on2 in fdc.tblStoragedisks on loc.online2 equals _on2.id into on2 

LINQに複数の左外部結合を書き込む方法はありますか?

+3

単一の左結合を作成するのと同じ方法で、複数の左結合を記述します。 'on1'の後にon1.DefaultIfEmpty()の_on1からコードが抜けています。そして、 '_on2'ではなく、' join _on2 ... 'を続けるだけです。 –

答えて

1

左外部結合は、.DefaultIfEmpty()メソッドによって実現されます。

var q = 
    from iter_1 in collection_1 
    join iter_2 in collection_2 on iter_1 equals iter_2 into join_1 
    from iter_2 in join_1.DefaultIfEmpty() 
    join iter_3 in collection_3 on iter_2 equals iter_3 into join_2 
    from iter_3 in join_2.DefaultIfEmpty() 
    ... 
    join iter_n in collection_n on iter_n_1 equals iter_n into join_n_1 
    from iter_n in join_n_1.DefaultIfEmpty() 
    select join_n_1; 
+0

よろしくお願いします! – Laurijssen

関連する問題