C# 在实体框架中将表值函数作为IQueryable执行
我是实体框架的新手,我使用Linq to SQL,它工作得很好,但是当我想要创建WCF数据服务时,我从该服务收到很多错误,所以我决定转到EF 但我的问题是TVF(表值函数),在我的数据库中,我有很多TVF返回每个登录用户的数据以及指定对象的用户权限,例如,我有一个表C# 在实体框架中将表值函数作为IQueryable执行,c#,entity-framework,C#,Entity Framework,我是实体框架的新手,我使用Linq to SQL,它工作得很好,但是当我想要创建WCF数据服务时,我从该服务收到很多错误,所以我决定转到EF 但我的问题是TVF(表值函数),在我的数据库中,我有很多TVF返回每个登录用户的数据以及指定对象的用户权限,例如,我有一个表记录和一个TVFuf\u SelectUserRecords(@UID BIGINT)。我希望执行此函数并返回其结果以代替记录表 在Linq to SQL中,它工作得很好,但在EF中,我无法使它运行,问题是当我将TVF添加到模型中时(
记录和一个TVFuf\u SelectUserRecords(@UID BIGINT)
。我希望执行此函数并返回其结果以代替记录
表
在Linq to SQL中,它工作得很好,但在EF中,我无法使它运行,问题是当我将TVF添加到模型中时(通过一些技巧,因为EF designer不支持它),TVF的结果不是IQueryable
,而是IEnumerable
,因此我无法在WCF数据服务中返回它
有什么方法可以将函数作为表执行吗?您可以使用AsQueryable()
将结果转换为IQueryable
:
IEnumerable result={call TVF};
IQueryable query=result.AsQueryable();
返回查询;
我看到EF 5支持TVF,但在我的项目中,我看不到对它的支持。为什么?我使用的是.NET 4,EF 5的新功能仅适用于.NET 4.5,它会对数据库或内存中的对象执行查询吗?是否将整个可枚举项从数据库加载到内存中,然后在其上运行查询?这取决于基础类型。如果它已经实现了IQueryable
,那么它应该。我从来没有试过,所以我不能肯定。你用的是什么版本的EF?似乎存在于EF 5中。我正在VS2012中使用EF5
IEnumerable<Record> result = {call TVF};
IQueryable<Record> query = result.AsQueryable();
return query;