LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
LINQ主要包含三个部分:主要负责对象的查询(LINQ to Objects)、主要负责XML的查询 (LINQ to XML) 、主要负责数据库查询(LINQ to ADO.NET)
LINQ主要解决的问题:1.编程语言的数据类型与数据库类型不一致。 2、Sql编码体验落后、3 sql和xml都有各自的查询语言,而对象没有查询语言。
LinQ可以对已存在的类型和行为进行扩展,但需要注意的是,扩展方法是一种特殊的静态方法,而且必须在静态类中定义。扩展的方法优先级低、而且限于特点的空间使用。所以除非必须不要滥用LINQ的扩展方法。
在LINQ中还有一种Lambda表示语法,例:
List<int> arr = new List<int>() { 1, 2, 3, 4, 5, 6, 7 };
var result = arr.Where(a => { return a > 3; }).Sum();
Console.WriteLine(result);
这段代码中
a便是参数 ,=>是LINQ的特定运算符 {}里面的内容代表方法体。其中 Where扩展方法,需要传入一个Func<int,bool>类型的泛型委托这个泛型委托,需要一个int类型的输入参数和一个布尔类型的返回值,我们直接把a
=> { return a > 3; }这个lambda表达式传递给了Where方法,a就是int类型的输入参数,返回a是否大于3的结果。Sum扩展方法计算了Where扩展方法返回的集合的和。
上面的代码:arr.Where(a => { return a > 3; }).Sum();我们通常写成这样的形式: (from v in arr where v > 3 select v).Sum();这两句代码的执行细节是完全一样的,大家可以看到,第二句代码更符合语义,更容易读懂,第二句代码中的where,就是我们要说的查询操作符。
Lambda函数的好处:
1、通过对比代码我们可以知道,前者在编程时简单,但不宜读懂。而后者容易读懂,但编写复杂。
2、效率。函数指针方法阻止了内联,因为编译器不会内联其地址被获取的函数。而函数符和Lambda函数通常不会阻止内联。
3、功能。Lambda可以访问作用域内的任何动态变量,把要捕获的变量放在中括号内。让你能够按引用访问所有动态变量。