以下のような質問があります。
bool variable = false//or true
var query = from e in _repository.GetAll<Entity>()
from u in e.Users
where (e.AuditQuestionGroupId != null ? e.AuditQuestionGroupId : 0) == this.LoggedInEntity.AuditQuestionGroupId
from p in e.PractitionerProfiles.DefaultIfEmpty()
select new { entity = e, user = u, profile = p };
これは正しく動作します。ただし、e.PractitionerProfiles への結合が DefaultIfEmpty を持つ必要があるかどうかを決定するブール変数があるため、内部結合ではなく左外部結合になります。
ただし、厄介なオブジェクトを使用しているため、正しく行う方法がわかりません。したがって、次のようにクエリ全体を複製することなく、左結合と内部結合を切り替える機能が必要です。
if(variable) {
var query = from e in _repository.GetAll<Entity>()
from u in e.Users
where (e.AuditQuestionGroupId != null ? e.AuditQuestionGroupId : 0) == this.LoggedInEntity.AuditQuestionGroupId
from p in e.PractitionerProfiles
select new { entity = e, user = u, profile = p };
}
else {
var query = from e in _repository.GetAll<Entity>()
from u in e.Users
where (e.AuditQuestionGroupId != null ? e.AuditQuestionGroupId : 0) == this.LoggedInEntity.AuditQuestionGroupId
from p in e.PractitionerProfiles.DefaultIfEmpty()
select new { entity = e, user = u, profile = p };
}
1 つのクエリでそれを行うクリーンな方法はありますか? 問題は、それに配置されるさらに多くの条件があることです。そのため、ループ内でクエリを宣言すると、ローカル変数がなく、空の IQueryable 匿名オブジェクトを作成する方法がわかりません。