有人能解释一下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有何不同?我如何识别一个或另一个?
由于
答案 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查询简洁,可读和(坦率地)可用。