我正在使用實體框架4.3.1,採用Code First方法。此外,我正在使用LinqKit以使用PredicateBuilder。實體框架代碼相關表的第一個4.3/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();
這是不行的,因爲謂詞構建爲接受時區,但Where()方法接收位置。
我可以重寫,像這樣的斷言,但我不想,因爲我想有一個謂語工廠,創建針對特定類型的謂詞(我不想以這種方式來使用導航性能):
Expression<Func<Location, bool>> pred = PredicateBuilder.True<Location>();
pred = pred.And(loc => loc.TimeZone.TimeZoneCode == "EST");
我可以使用什麼語法(如果有的話)使用第一個示例中構造的謂詞,它需要一個TimeZone,而不是讓它通過導航屬性來獲取位置並漫遊樹(因爲這是較少可重用)。如果有一種方法可以利用EF關於導航屬性的知識,並且能夠將謂詞範圍用於導航屬性的類型,那將會很不錯。
感謝您的更新!您可以通過LINQ/LINQKit提供EF可以轉換爲SQL的東西來增加對此謂詞是否適用於服務器端的洞察,或者這是否將EF應用於未經過濾的數據集中的內部蠻力? – 2015-01-27 20:25:08
@PittsburghDBA這導致通過EF調用數據庫,轉換爲SQL。 – Grinn 2015-01-27 21:40:40
謝謝你的這個了不起的後續行動!!!!! – 2015-01-28 16:52:26