在Entity Framework中将表值函数作为IQueryable执行
本文关键字:函数 IQueryable 执行 Entity Framework | 更新日期: 2023-09-27 18:27:22
我是实体框架的新手,我在SQL中使用了Linq,它运行得很好,但当我想创建WCF数据服务时,我收到了来自该服务的很多错误,所以我决定转到EF。
但我的问题是TVF(表值函数),在我的数据库中,我有很多TVF,它们返回每个登录用户的数据以及指定对象的用户权限,例如,我有一个表Records
和一个TVF uf_SelectUserRecords(@UID BIGINT)
。我想执行这个函数并返回它的结果来代替Records
表。
在Linq-to-SQL中,它运行得很好,但在EF中,我无法使它运行,问题是当我将TVF添加到模型中时(通过一些技巧,因为EF设计器不支持它),TVF的结果不是IQueryable
,而是IEnumerable
,所以我无法在WCF数据服务中返回它。
有什么方法可以将函数作为表来执行吗?
您可以使用AsQueryable()
:将结果转换为IQueryable
IEnumerable<Record> result = {call TVF};
IQueryable<Record> query = result.AsQueryable();
return query;
每次我看到EF 5都支持TVF,但在我的项目中我看不到对它的支持。为什么?我使用的是.NET 4,EF 5的新功能仅适用于.NET 4.5