Предикат Entity Framework Code First 4.3/LINQKit для связанной таблицы

Я использую Entity Framework 4.3.1 с подходом Code First. Кроме того, я использую LinqKit, чтобы использовать PredicateBuilder.

Если у меня есть такие таблицы:

Местоположение, часовой пояс (Много :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");

Какой синтаксис я мог бы использовать (, если таковой имеется ), чтобы использовать предикат, созданный в первом примере, где он принимает часовой пояс, вместо того, чтобы принимать местоположение и проходить по дереву через свойства навигации (, как это менее пригодны для повторного использования ). Было бы неплохо, если бы был способ использовать знания EF о свойствах навигации в первую очередь и иметь возможность использовать предикат, связанный с типом свойства навигации.

5
задан Pittsburgh DBA 24 July 2012 в 01:28
поделиться