lamda条件和linq条件之间的区别?

时间:2019-06-13 05:45:12

标签: c# .net entity-framework linq lambda

我正在使用带有EF-6.x的MVC Core,并且正在使用Lambda表达式,但是我的上级告诉我使用LINQ的原因,因为使用lambda和where子句时,它将从数据库中提取所有数据,稍后它将有条件时适用。在LINQ的情况下,如果使用where条件,它将仅提取经过过滤的数据。请让我知道什么是正确的?

例如Lambda: context.tablename.where(condition);// Should I go with this

LINQ: (from T in tablename where t.(condition));// or this?

3 个答案:

答案 0 :(得分:1)

两种语法都将转换为相同的IL代码。如果将过滤器应用于服务器端或客户端,则区别在于源是IQueryable<T>还是IEnumerable<T>

答案 1 :(得分:1)

  

请让我知道什么是正确的?

     

e.gLambda:context.tablename.where(condition); //我应该这样做

     

LINQ :(从表名中的T,其中t。(条件)在哪里); //还是这个?

简短的回答:这并不重要。由于context.tablename最终返回了IQueryable<T>,因此Entityframework将尝试访问数据库,直到您尝试从表达式中迭代最终结果为止,更不用说{{1} }和.ToArray(),分别为您进行迭代。

无论您使用LINQ表达式语法(被编译为LINQ方法)还是LINQ方法,当您尝试开始迭代结果时,Entityframework都会为您创建一个.ToList()树,在完全由您的查询组成的引擎盖(包括ExpressionWhereJoin等)。由于LINQ的结构可能与SQL查询(或任何数据源查询)的结构不完全匹配,因此取决于源(即数据库,例如SQL Server),因此Entityframework会尝试对表达式进行最佳的优化树,以便其结构与源上的可执行查询(例如SQL Server查询)匹配。最后,它将表达式树转换为实际查询,并针对数据源执行该查询,并返回您的数据(当然,在完成所有映射之后)。

如果真的,我是说 REALLY 想了解GroupBy引擎工作原理的复杂性,建议您浏览一下Matt Warren的系列文章:“ {{ 3}}”。那实际上不是Entityframework,但它具有相同的概念。

答案 2 :(得分:0)

  

我的前辈告诉我为什么要使用LINQ,因为在使用lambda的同时   子句将从数据库中提取所有数据,以后再应用   条件在哪里。

您的上级是错误的,您可以使用您希望它们相同的语句,两者都将在数据库级别过滤数据。如果您将Sql Server作为数据库服务器,则可以使用Sql Server Profiler转储这两个语句执行的查询,您会发现它们是相同的。