在Linq中调用Select()或GroupBy()到实体是否会触发查询数据库?
我很难说出linq中的哪些操作导致向数据库发出SQL命令在Linq中调用Select()或GroupBy()到实体是否会触发查询数据库?,linq,entity-framework,linq-to-entities,Linq,Entity Framework,Linq To Entities,我很难说出linq中的哪些操作导致向数据库发出SQL命令 我知道调用ToList()或迭代w/foreach会导致查询运行,但Select和GroupBy会导致代码在数据库上执行吗?不,它们不会,如果在IQueryable而不是IEnumerable上正确调用,它们将被编译为表达式,稍后将被转换为SQL 您可以使用intellisense工具提示查看当前调用的方法。如果扩展方法的第一个参数是IEnumerable而不是IQueryable,则将运行数据库查询。否,调用Select()和Group
我知道调用ToList()或迭代w/foreach会导致查询运行,但Select和GroupBy会导致代码在数据库上执行吗?不,它们不会,如果在
IQueryable
而不是IEnumerable
上正确调用,它们将被编译为表达式,稍后将被转换为SQL
您可以使用intellisense工具提示查看当前调用的方法。如果扩展方法的第一个参数是
IEnumerable
而不是IQueryable
,则将运行数据库查询。否,调用Select()和GroupBy()将不会命中数据库。只有在需要实际结果时(枚举时,使用ToList()、ToArray()、Count()等),才会对数据库执行查询。否、选择、分组方式以及大多数其他方法都不会导致数据库请求。数据库请求通常仅在您执行需要知道结果的操作时才会发出,如您提到的调用Count
或ToList
为了帮助您了解何时进行数据库查询,记录这些查询可能会有所帮助。然后,当您逐步浏览代码时,您可以看到何时发送查询。谢谢您的提示,但我不认为在Linq to entities中可以看到正在运行的日志……您可以看看这个问题及其答案:您确定在IEnumerable而不是IQueryable上调用GroupBy会导致将查询发送到数据库吗?我以为只有在开始枚举时才会发送查询。