我正在使用實體框架來訪問我的域模型,所有這些模型都實現了一個指定屬性的接口(IPublishable),以指示項目是否已發佈。.NET LINQ to Entities基類where子句的泛型類型
當從前端訪問項目時,我總是希望過濾掉未發佈的項目。所以,每次我寫一個查詢我在做一些與此類似(其中以下DbSets Objects1和Objects2都實現時間IPublishable
context.Objects1.Where(x => x.IsPublished ...).OrderBy(x => x.Id).ToList()
context.Objects2.Where(x => x.IsPublished ...).First()
什麼是理想的是,如果我能注入共同Where()
條款爲我所有的我的web應用程序中查詢,或者出現編寫擴展方法,我可以包括在每個查詢的方式。
我嘗試了所有的LINQ查詢
public static IEnumerable<T> FrontEnd<T>(this DbSet<T> dbSet) where T : class {
return dbSet.Cast<IPublishable>().Where(x => x.IsPublished ...).Cast<T>();
}
創建擴展方法,並使用了諸如t他...
context.Objects1.FrontEnd().Where(x => ...).OrderBy(...
但是我得到的錯誤「LINQ到實體僅支持鑄造EDM原始或枚舉類型」
我新的EF,所以任何信息將是一個很大的幫助。 謝謝
我認爲某種[表達](http://msdn.microsoft.com/en-us/library/bb397951.aspx)可以爲這個創建。 – Romoku
爲了完成類似的事情,我最終使用了動態LINQ。但是,這只是針對特定的數據子集,而不是您需要的「所有linq查詢」,所以我不確定它是否正是您想要的。 – Mansfield
我認爲我正在尋找的真實答案是基於知識庫的應用程序和實體框架之間的臨時過程,我可以攔截查詢並在基礎上添加我在所有查詢中使用的子句 – JDandChips