我需要共享4-5個不同實體集合的謂詞,最好不要複製代碼。所有實體都實現了接口IEntity
。實體框架通用謂詞
private Expression<Func<T, bool>> GetUpdatedPredicate<T>(DateTime? lastUpdated) where T : IEntity {
if (lastUpdated.HasValue) {
return x => (
x.CreatedAt >= lastUpdated ||
(x.UpdatedAt.HasValue && x.UpdatedAt >= lastUpdated)
);
}
return x => true;
}
然後像這樣使用,跨多個實體集:
(
from s in Db.EntityA.Where(GetUpdatedPredicate<EntityA>(lastUpdated))
where (
s.User.Id == 1
)
select s
).Future();
但提供了錯誤: 無法轉換類型'EntityA爲鍵入 'IEntity'。 LINQ to Entities僅支持投射EDM基元或枚舉類型。有沒有辦法做到這一點,而不重複的代碼?
我認爲你正在嘗試做類似於我正在嘗試做的事情,並遇到同樣的問題。我試圖按組織過濾,您正嘗試按用戶進行過濾。看看這裏的解決方案:http://stackoverflow.com/q/20052827/150342 – Colin
這樣做的工作,但@ Moeri的解決方案......國際海事組織是更好的;) – Jamie