繁体   English   中英

linq是否将从存储过程调用中带回所有记录,然后进行过滤?

[英]Will linq bring back all records from a stored procedure call, and then filter?

根据下面的EF linq,是否会遇到存储的proc usp_GetTestRecords()中的所有记录,然后对其进行过滤?

    TestRecordsDBEntities dataContext = new TestRecordsDBEntities();
    var tests = dataContext.usp_GetTestRecords();
    var filtered = tests.Where(x => x.GroupId == groupId)
        .OrderByDescending(y => y.Name)
        .ToList();

是的,所有数据都将首先在内存中提取,然后在客户端进行过滤 在EF中使用存储过程不是一个好主意。 您将在此处失去延迟,急切或显式加载的优势。 但是,如果让EF为您生成查询,则它将被所有过滤器编译并在服务器上执行

或者,您可能需要考虑创建表值函数而不是存储的proc。 这样做的好处是可以将函数的结果集与服务器端的其他表结合在一起。 缺点是,您在函数内部只能执行的操作受到限制,并且数据库无法访问索引视图所能获得的函数结果索引。

http://blogs.msdn.com/b/efdesign/archive/2011/01/21/table-valued-function-support.aspx上了解有关将TVS与EF结合使用的更多信息

Sproc将始终返回受与其相关联的te查询影响的所有记录。 如果要添加where子句,只需将一个参数添加到您的sproc并在sql中执行过滤。 检查此以获取更多信息。 如何将参数从实体框架传递到存储过程?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM