適切なテーブルをフィルタリングする必要がある自己結合をマップしようとしています。たとえば、次のような SQL です。
select t2.* from table t
left join table t2
on t2.parentID = t.ID and t2.active=1;
左のテーブルをフィルタリングしたい場合は、構文を理解できます。
// works
var query = from t in table
where t.active= 1
join t2 in table
on t.parentID equals t2.ID into joined
from r in joined.DefaultIfEmpty() ...
しかし、正しいテーブルをフィルタリングする方法がわかりません。このようなものでなければならないようです...
// does not work
var query = from t in table
join t2 in table
where t.field = 1
on t.parentID equals t2.ID into joined
from r in joined.DefaultIfEmpty() ...
(有効join
ではありません...どこにもありません)。複数の from 句を使用することについての議論がありますが、複数の from 句を作成where
して 2 番目の句に a を追加できるようにすると、それらの結果を新しい一時テーブルに結合する方法がわかりません。
結合の後に「where」を追加することはできません。右側のテーブルを最初にフィルター処理する必要があります。そうしないと、一致が発生where
し、最後の句によって、出力に必要な左側のテーブルから行が削除されます。つまり、出力には、フィルター処理された右側のテーブルから一致するものがない行が含まれている必要があります。したがって、結合する前に適切なテーブルをフィルタリングする必要があります。