我希望EF使用T-SQL表值函数来过滤实体。
该函数返回CompanyID列表,以便EF可以添加where语句,如
...WHERE CompanyID IN (SELECT CompanyID FROM dbo.BySearchOptions({0},{1}))
以后我可以创建像
这样的扩展方法IQueryable<Company> BySearchOptions(this IQueryable<Company, SearchOptions options)
并与其他人联系,如
var companies = Entities.Companies.
Where(someconde).BySearchOptions(myOptionsObject).OrderBy.Whatever...
有可能吗?
编辑:我知道有Entity SQL,因此Where()方法可以使用ESQL字符串而不是谓词。可以使用Entity SQL来应用t-sql函数吗?
答案 0 :(得分:1)
EF支持映射SQL函数,但不支持(在EF 4中)返回表值的函数。
另一种方法是使用ObjectContext.ExecuteStoreQuery并传递T-SQL。
但是你无法按照你的要求进一步撰写查询。
可能的解决方法是将SQL查询放在数据库服务器视图中。
答案 1 :(得分:0)
您可以通过函数进行过滤,方法是将select语句放在存储过程中,然后从EF调用存储过程。
可能不是您正在寻找的优雅解决方案,但它会起作用。