計画とドキュメントがあるとしましょう
Dim myPlans = _context.Plans.Where(predicate1)
Dim myDocuments = _context.Documents.Where(predicate2)
PredicateBuilderを使用して、それぞれのwhere句を構造化しました。したがって、myPlansとmyDocumentsには正しいSQLステートメントがあります。
私がやりたいのは、これら2つのテーブルを1つのlinqステートメントに結合することです。私が抱えている問題は、デフォルトでは、AND条件がwhere句を結合していることです。
myPlans Where句:(p.name like "%test%" AND p.name like "%bed%")OR(p.description like "%test%" AND p.description like "%bed%")
myDocuments Where句:(d.name like "%test%" AND d.name like "%bed%")OR(d.description like "%test%" AND d.description like "%bed%")
2つを組み合わせると、望ましい結果のWhere句は次のようになります
。Where(d.ID = p.ID)AND(myplans where句)OR(mydocument where句)。つまり、各テーブルの2つのwhere句を「And」ではなく「or」にします。
現在の結果のwhere句は次のとおりです。Where(d.ID = p.ID)AND(myplans where句上記)AND(mydocument where句上記)。つまり、各テーブルの2つのwhere句を「And」ではなく「or」にします。
私は次のようなステートメントを作成しています:
Dim test = From d in myDocuments _
Join p in MyPlans on d.ID Equals p.ID _
Select d.Name, p.Name