2010-11-19 68 views
1

我希望EF使用T-SQL表值函數來過濾實體。在Entity Framework中按服務器功能過濾實體?

該函數返回CompanyID的列表,以便EF可以添加一個WHERE語句像

...WHERE CompanyID IN (SELECT CompanyID FROM dbo.BySearchOptions({0},{1})) 

這樣,以後我可以創造像

IQueryable<Company> BySearchOptions(this IQueryable<Company, SearchOptions options) 

的擴展方法,並與其他類似

IT連鎖
var companies = Entities.Companies. 
    Where(someconde).BySearchOptions(myOptionsObject).OrderBy.Whatever... 

這可能嗎?

編輯:我知道有Entity SQL,所以Where()方法可以使用ESQL字符串而不是謂詞。實體SQL可以用於應用t-sql函數嗎?

回答

0

通過將select語句放入存儲過程,然後從EF中調用存儲過程,可以通過函數進行過濾。

可能不是您尋找的優雅解決方案,但它會工作。

+0

謝謝,但我希望過濾器與連接,組等中使用的其他子句鏈接在一起。 – Evgenyt 2010-11-19 16:34:59

1

EF支持映射SQL函數,但不支持(在EF 4中)返回表值的函數。

一種替代方法是使用ObjectContext.ExecuteStoreQuery並傳遞T-SQL。

但是,如您所問,您無法進一步撰寫查詢。

可能的解決方法是將SQL查詢置於數據庫服務器視圖中。

相關問題