C# linq会从存储过程调用中带回所有记录,然后进行筛选吗?

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

给定下面的EF linq,存储过程usp_getestRecords()中的所有记录都会出现并被过滤吗

    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
If
usp_getestrecords()
返回一个
IQueryable
,当然,这是另一回事。是的………是的,因为存储过程调用只是另一个方法调用,一个调用都不会返回一个IEnumerableIt,当您定义
测试时(假设这就是
usp\u getestrecords()
所做的),然后在下一行中过滤结果,在下一行中定义
filtered
,如果
usp\u getestrecords()
返回一个
IQueryable
,则,这是另一回事。这是我的问题我有一个动态透视查询(为了简单起见未显示)无法进入我的gridview这是我的问题我有一个动态透视查询(为了简单起见未显示)无法进入我的gridview