猿问

Entity Framwork 存储过程

问题:如果我使用存储过程创建一个IQueryable<实体类型/复杂类型>对象,但我需要对存储过程执行结果进行过滤。因为某些原因,我不希望向存储过程传递参数。虽然我可以用URI:http://localhost:54321/Wcf/ZJ.svc/QueryTest?$filter = FacilityName eq 'PC'这种格式对结果进行过滤,但是我对这种方法存在顾虑 
var context = new Entities(); 
var query = context.存储过程().AsQueryable(); 
query对象是否是先返回所有存储过程结果,然后再对结果集进行过滤? 
comment:存储过程 select * from T_ZJ_Facility 

我用EntitySql进行测试的结果 
public IQueryable<T_ZJ_Facility> QueryTest() 
{var context = new Entities(); 
var query = context.T_ZJ_Facility.AsQueryable(); 
return query.AsQueryable();} 

慕侠2389804
浏览 520回答 2
2回答

小怪兽爱吃肉

我跟踪了数据库执行记录,exec 存储过程名实体类应该是不可以映射sql语句为表达式树,而表达式树是可以映射成sql语句。使用存储过程不能很好和IQueryable的接口进行完美兼容,特别在存储过程返回的数据量比较大时,而有效数据较少时。当然可以将参数传递给存储过程来解决这个问题。

月关宝盒

SELECT 哪些字段是由实体类以及映射关系的定义决定的。如果查询结果没有你想要的字段,可以在实体类中添加相应的属性。
随时随地看视频慕课网APP
我要回答