Code First アプローチで Entity Framework 4.3.1 を使用しています。また、PredicateBuilder を使用するために LinqKit を使用しています。
次のようなテーブルがある場合:
場所、タイムゾーン (多:1)
..そして、私は次のようなものが欲しいです:
Expression<Func<TimeZone, bool>> pred = PredicateBuilder.True<TimeZone>();
pred = pred.And(tz => tz.TimeZoneCode == "EST");
List<Location> locations = context.Locations
.AsExpandable().Where(pred)
.Select(loc => loc).ToList();
述語は TimeZone を受け入れるように構築されていますが、Where() メソッドは Location を受け取るため、これは機能しません。
このように述語を書き直すことはできますが、特定の型の述語を作成する述語ファクトリが必要なため、そうしたくありません (この方法で Navigator プロパティを使用したくありません)。
Expression<Func<Location, bool>> pred = PredicateBuilder.True<Location>();
pred = pred.And(loc => loc.TimeZone.TimeZoneCode == "EST");
Location を取得してナビゲーション プロパティを介してツリーをたどる (これは再利用性が低いため) のではなく、TimeZone を取得する最初の例で構築された述語を使用するために、(もしあれば) どの構文を使用できますか? そもそも EF がナビゲーション プロパティについて持っている知識を活用し、ナビゲーション プロパティの型にスコープが設定された述語を使用できる方法があればいいのですが。