lambda和LINQ之间的区别?

时间:2016-01-24 19:08:40

标签: c# linq lambda

有人能解释一下lambda和linq之间的区别吗?

请不要指出我的其他堆栈交换答案或琐碎的解释,我已经检查了大部分答案,并且他们非常混乱。

在这些日子里我使用过一些LINQ(我相信?)的表达方式(仅仅是一个发明的例子)

var result = object.Where(e => e.objectParameter > 5).Any()

其中,应返回一个布尔值,表示是否有任何元素> 5.

好的,那么,什么是LINQ和lambda?

LINQ只是一个库,一组函数,由C#团队开发,包含

using System.Linq;

它为你提供了一个动力的" for循环"有很多方法可以避免让你的手弄脏"脏"? (首先,FirstOrDefault,Any ....等)

什么是Lambda?和上面一样吗?它是一种语言吗?它是什么以及它与LINQ有何不同?我如何识别一个或另一个?

由于

4 个答案:

答案 0 :(得分:16)

Linq(Language Integrated Query)可以使用Lambdas(Lambda Expressions),但不是必须的。

这是Linq:

var a = from b in someList
        where b.Value == something
        select b;

但可以用Lambda编写:

var a = someList.Where(b => b.Value == something);

Lambda是b => b.Value == something

mock.Setup(m => m.SomeOp()).Returns(new Thing());使用Lambda(m => m.SomeOp()),但与Linq无关。

答案 1 :(得分:6)

  

语言集成查询(LINQ)是一组引入的功能   Visual Studio 2008将强大的查询功能扩展到了   C#和Visual Basic的语言语法

     

lambda表达式是您可以使用的匿名函数   创建委托或表达式树类型。通过使用lambda   表达式,您可以编写可以作为传递的本地函数   参数或作为函数调用的值返回。

Linq 使用 Lambda表达式来执行某些功能。

示例:

new [] { "Dan", "Yossi", "Ben" }.Where(item => item.Length == 3);

Lambda表达式:item => item.Length == 3
Linq:(from item in (new [] { "Dan", "Yossi", "Ben" }) where item.Length == 3)

答案 2 :(得分:2)

LINQ是一个库,它包含一组扩展方法(主要是IEnumerable),它们大量使用lambdas。 lambda本身就是一个匿名委托,只是简单的语法糖。它为您提供了一种简单的方法来“在线”定义函数,并将该函数传递给某个方法。

例如,你可以像这样编写上面的代码:

var result = object.Where(delegate(e) { 
     return e.objectParameter > 5; 
}).Any()

答案 3 :(得分:2)

Lambdas只是表达匿名方法的语法,自.NET 2.0以来就存在于语言中。

e => e.objectParameter > 5(一个带有对象e并返回布尔值的lambda)和较早的语法delegate(MyObj e) { return e.objectParameter > 5;}之间没有太大区别。如果您正在使用Resharper,则可以使用它将任何lambda转换为匿名方法,反之亦然。

因此,lambdas不等同于LINQ,它们是匿名函数的简写语法。但是,它们是LINQ的垫脚石

LINQ本质上是一种使用从函数式编程中借鉴的技术来过滤,转换和操作集合的方法。这些技术依赖于函数作为第一类对象的概念,这意味着您调用一个方法(例如,上面的Where)并向其传递一个函数,该函数确定Where过滤器的方式。在lambdas之前使用C#,这将非常麻烦,编码器被迫使用详细的匿名委托语法,或为每个Where调用创建一个命名方法。 (要了解这看起来多么笨重,请查看Java 7的匿名类型)。所以lambda被添加到语言中以允许LINQ查询简洁,可读和(坦率地)可用。