我正在使用 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");
我可以使用什么语法(如果有的话)来使用第一个示例中构造的谓词,它需要一个 TimeZone,而不是让它接受一个 Location 并通过导航属性遍历树(因为这不太可重用)。如果有一种方法可以首先利用 EF 对导航属性的了解,并且能够使用范围为导航属性类型的谓词,那就太好了。