按实体框架中的服务器功能过滤实体?

时间:2010-11-19 16:17:26

标签: linq-to-sql entity-framework linq-to-entities

我希望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函数吗?

2 个答案:

答案 0 :(得分:1)

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

另一种方法是使用ObjectContext.ExecuteStoreQuery并传递T-SQL。

但是你无法按照你的要求进一步撰写查询。

可能的解决方法是将SQL查询放在数据库服务器视图中。

答案 1 :(得分:0)

您可以通过函数进行过滤,方法是将select语句放在存储过程中,然后从EF调用存储过程。

可能不是您正在寻找的优雅解决方案,但它会起作用。