私はいくつかのエンティティ フレームワーク コードを制御しており、それをリファクタリングしようとしています。その前に、自分の考えが正しいか、エンティティ フレームワークのやり方を見逃していないかを確認したいと思います。
例 1 - サブクエリと結合
ここでは、A と B の間に 1 対多があります。以下のコードは読みにくいだけでなく、非効率的ですか?
from a in dataContext.As
where ((from b in dataContext.Bs
where b.Text.StartsWith(searchText)
select b.AId).Distinct()).Contains(a.Id)
select a
たとえば、結合を使用してこのようなことを行う方が良いでしょうか?
from a in dataContext.As
where a.Bs.Any(b => b.Text.StartsWith(searchText))
select a
例 2 - 明示的な結合とナビゲーション
ここでは、A と B の間は 1 対多、B と C の間は 1 対多です。
from a in dataContext.As
join b in dataContext.Bs on b.AId equals a.Id
join c in dataContext.Cs on c.BId equals b.Id
where c.SomeValue equals searchValue
select a
データ モデルをナビゲートするのではなく、明示的な結合を使用する正当な理由はありますか? 例えば:
from a in dataContext.As
where a.Bs.Any(b => b.Cs.Any(c => c.SomeValue == searchValue)
select a