linq和lamda半毛钱关系啊。lamda简单说就是个语法糖,本来你要声明实现一个方法,然后在调用,要写一大堆代码,可是微软总是认为程序员是懒散的,如二楼的例子:
Func<int,int,int> fc=(int x,int y)=>x*y;
你看就一句代码,声明一个方法,返回值为int,参数是两个int。功能是计算两个整数的乘积。
linq是微软认为当下程序已经不仅仅是简单的和数据库打交道了,我们的数据来源可能很多种,所以除了那个linq to sql,还出现了linq to xml等等,当然实际上我们最常用的就是linq to entity,这里entity就是内存对象了。说白了linq就是结构化查询语言,只不过不同于sql,他不局限于关系数据库。当然也引进了一些特征:如延迟执行,为了智能提示又改写了sql的习惯,入sql是select * from table ,linq中是from table selec var。
至于二楼写的那个,其实就是个混血,linq与lamda混用,因为有时候我们不想写太长的linq语句,然后微软对于很多类型,如list、dictionary等等集合都实现了或多或少的linq接口,你只要传一个方法给他就行了,然后因为这里的参数是方法,所以我们因为懒散,就又开始使用lamda了。于是就出现了二楼举的第三个例子
你为什么不直接看MSDN?那里应该说的特别详细。
弱弱问句:怎样在MSDN:http://msdn.microsoft.com/zh-cn/library/ms123401.aspx 上面找关于Linq和Lambad的区别尼?搜索又搜不出来,难道只能在左侧菜单一下一下的点出来找?
Func<int,int,int> fc=(int x,int y)=>x*y;
var someInts = from a in Enumerable.Range(1, 5)
from b in Enumerable.Range(6, 5)
where a < 3 && b < 104 select new { a, b, sum = a + b };
Enumerable.Range(2, 5).Select(x => string.Format("_{0}", x)
不好描述,第一个是lambda,第二个是Linq,第三个是Linq里面也有方法体和lambda
我介绍LINQ的博客 http://www.cnblogs.com/cmsdn/archive/2012/04/12/2442107.html
Lambda 在基于方法的 LINQ 查询中用作标准查询运算符方法(如 Where)的参数。
使用基于方法的语法在 Enumerable 类中调用 Where 方法时(像在 LINQ to Objects 和 LINQ to XML 中那样),参数是委托类型 System.Func<T, TResult>。 使用 Lambda 表达式创建委托最为方便。 例如,当您在 System.Linq.Queryable 类中调用相同的方法时(像在 LINQ to SQL 中那样),则参数类型是 System.Linq.Expressions.Expression<Func>,其中 Func 是包含至多十六个输入参数的任何 Func 委托。 同样,Lambda 表达式只是一种用于构造表达式树的非常简练的方式。 尽管事实上通过 Lambda 创建的对象的类型是不同的,但 Lambda 使得 Where 调用看起来类似。
前者是表达式,后者是语句!表达式要符号链接,语句就不用了!表达式是类似C#语法的写法,语句是类数据库语法的写法!
Lamda表达式,是拉姆达表达,Linq的数学基础,linq只是一个Lamda的一个实现。但从Lamda到linq是有个技术发展过程的,不是一步到位的。在 .NET 上的实现,就经历了大概3个过程。Lamda 表达式这个数学问题,证明或表明了,一个函数可以用更简单的方式来表述,参数定义是可以省略的,这样,利用.net 的委托,加上之前匿名函数,等等技术要点,就形成了 LINQ。你可以在WIKI查查。
微软霸霸贴心