var result = from R in db.Clients.Where(clientWhere)
join RA in db.ClientAgencies on R.SysID equals RA.SysID
join A in db.Agencies.Where(agencyWhere) on RA.AgencyID equals A.AgencyID
join AC in db.AdCommittees on A.AgencyID equals AC.AgencyID into temp
from x in temp.DefaultIfEmpty().Distinct()
select new {R,RA,x};
ユーザーがCommitteeIDに入ると、これは私が行うことですが、より良い方法が必要だと感じています。linqにこの節を追加するには、より良い方法が必要です。
var query = (from R in result
where R.x.CommitteeID == params.CommitteeID
select R.R).Distinct();
return query;
もっと良い方法がありますか?
DefaultIfEmpty()は、あまりにも、繰延操作です。 Reflectorで確認できます - "return source.Provider.CreateQuery ..." – dahlbyk
毎日何かを学ぼう。私はそれがどのように動作するのだろうか、あなたが安全にデフォルトをnullにする場合は、クエリを構築できますか? – Spence
LINQはあまり気にしません。DefaultIfEmptyメソッドの呼び出しをクエリプロバイダに渡し、それに応じて処理します。通常のSQL変換では、これは左外部結合になります。 – dahlbyk