C# linq会从存储过程调用中带回所有记录,然后进行筛选吗?
给定下面的EF linq,存储过程usp_getestRecords()中的所有记录都会出现并被过滤吗C# linq会从存储过程调用中带回所有记录,然后进行筛选吗?,c#,linq,entity-framework,C#,Linq,Entity Framework,给定下面的EF linq,存储过程usp_getestRecords()中的所有记录都会出现并被过滤吗 TestRecordsDBEntities dataContext = new TestRecordsDBEntities(); var tests = dataContext.usp_GetTestRecords(); var filtered = tests.Where(x => x.GroupId == groupId) .OrderByDe
TestRecordsDBEntities dataContext = new TestRecordsDBEntities();
var tests = dataContext.usp_GetTestRecords();
var filtered = tests.Where(x => x.GroupId == groupId)
.OrderByDescending(y => y.Name)
.ToList();
是所有数据将首先在内存中提取,然后在客户端进行过滤。将存储过程与EF一起使用不是一个好主意。您将失去懒惰、渴望或显式加载的优势。但是,如果您让EF为您生成查询,那么它将被编译并在服务器上执行所有筛选器是所有数据将首先在内存中提取,然后在客户端进行筛选。将存储过程与EF一起使用不是一个好主意。您将失去懒惰、渴望或显式加载的优势。但是,如果您让EF为您生成查询,那么它将被编译,所有过滤器将在服务器上执行,存储过程将始终返回受与之关联的te查询影响的所有记录。如果要添加where子句,只需在存储过程中添加一个参数,并在sql中执行筛选。检查此项以了解更多信息存储过程始终会返回受与其关联的te查询影响的所有记录。如果要添加where子句,只需在存储过程中添加一个参数,并在sql中执行筛选。另一方面,您可以考虑创建一个而不是存储的进程。这里的优点是,函数的结果集可以与服务器端的其他表连接。缺点是,您在函数内部所能做的事情有限,并且数据库无法访问函数结果的索引,而您可以使用索引视图访问这些索引
<>请参阅在E/P > < P>中使用EF的TV,作为替代,您可能需要考虑创建一个而不是存储的PROC。这里的优点是,函数的结果集可以与服务器端的其他表连接。缺点是,您在函数内部所能做的事情有限,并且数据库无法访问函数结果的索引,而您可以使用索引视图访问这些索引
查看更多关于在EF中使用TVS的信息,请参见yes…………yes,因为存储过程调用只是另一个方法调用,而不是一个调用。当您定义
测试时,返回的是IEnumerableIt(假设usp_getestRecords()
就是这样做的),它看起来像是在获取所有记录然后在下一行中过滤结果,在下一行中定义filtered
Ifusp_getestrecords()
返回一个IQueryable
,当然,这是另一回事。是的………是的,因为存储过程调用只是另一个方法调用,一个调用都不会返回一个IEnumerableIt,当您定义测试时(假设这就是usp\u getestrecords()
所做的),然后在下一行中过滤结果,在下一行中定义filtered
,如果usp\u getestrecords()
返回一个IQueryable
,则,这是另一回事。这是我的问题我有一个动态透视查询(为了简单起见未显示)无法进入我的gridview这是我的问题我有一个动态透视查询(为了简单起见未显示)无法进入我的gridview