在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数据服务中返回它。

有什么方法可以将函数作为表来执行吗?

在Entity Framework中将表值函数作为IQueryable执行

您可以使用AsQueryable():将结果转换为IQueryable

IEnumerable<Record> result = {call TVF};
IQueryable<Record> query = result.AsQueryable();
return query;

每次我看到EF 5都支持TVF,但在我的项目中我看不到对它的支持。为什么?我使用的是.NET 4,EF 5的新功能仅适用于.NET 4.5