这篇文章介绍了语言集成查询LINQ,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 一、为什么要使用LINQ
要理解为什么使用LINQ,首先看下面的例子。假设有一个整数类型的数组,找到里面的偶数,按降序排序。
在C#2.0之前,如果要实现这样的功能,必须使用# 39;foreach # 39或者# 39;对于# 39;要遍历数组,首先找到偶数,然后按降序排序。相关代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LinqOfSelectOperation{ class Program { static void Main(string[] args) { // 查询出数组中的偶数并排序 int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; // 定义一个整数类型的集合,用来存放数组中的偶数 Listlt;intgt; list = new Listlt;intgt;(); // 遍历数组查询出偶数放到集合中 foreach (int i in ints) { // 如果是偶数,把偶数加入到集合中 if (i % 2 == 0) { list.Add(i); } } // 正序排序 list.Sort(); // 反转 list.Reverse(); // 输出 Console.WriteLine(string.Join(",",list)); Console.ReadKey(); } }}
使用for循环很麻烦,不可维护,可读性差。# 2.0引入了delegate,可用于处理这种情况。代码如下图所示:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LinqOfSelectOperation{ // 定义委托 delegate bool FindEven(int item); class IntExtension { public static int[] where(int[] array, FindEven dele) { int[] result=new int虽然可以通过使用delegate来增加程序的可读性,但C#团队认为他们仍然需要使代码更加紧凑和可读,因此他们在C#3.0中引入了新的功能,如扩展方法、Lambda表达式、匿名类型等。可以使用C#3.0的这些新特性,这些新特性使用LINQ的前提可以用来查询不同类型的集合并返回所需的结果。; int i = 0; foreach (int item in array) { if (dele(item)) { result[i]=item; i++; } } return result; } } class Program { static void Main(string[] args) { // 查询出数组中的偶数并排序 int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; //delegate(int item){return item % 2 == 0;}表示委托的实现 Listlt;intgt; list = IntExtension.where(ints, delegate(int item) { return item % 2 == 0; }).ToList(); // 正序排序 list.Sort(); // 反转 list.Reverse(); // 输出 Console.WriteLine(string.Join(",", list)); Console.ReadKey(); } }}
所以,有了C#2.0,我们通过使用delegate就有了代理的优势,不用再用for循环来查询不同条件的数组。例如,您可以使用同一个委托来查找数组中的奇数,并按降序对输出进行排序。代码如下图所示:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LinqOfSelectOperation{ // 定义委托 delegate bool FindEven(int item); class IntExtension { public static int[] where(int[] array, FindEven dele) { int[] result=new int[3]; int i = 0; foreach (int item in array) { if (dele(item)) { result[i]=item; i++; } } return result; } } class Program { static void Main(string[] args) { // 查询出数组中的奇数并排序 int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; //delegate(int item){return item % 2 != 0;}表示委托的实现 Listlt;intgt; list = IntExtension.where(ints, delegate(int item) { return item % 2 != 0; }).ToList(); // 正序排序 list.Sort(); // 反转 list.Reverse(); // 输出 Console.WriteLine(string.Join(",", list)); Console.ReadKey(); } }}
[5]
下面的示例演示如何使用LINQ和Lambda表达式根据特定条件查询数组。示例代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LinqOfSelectOperation{ class Program { static void Main(string[] args) { // 查询出数组中的奇数并排序 int[] ints = { 5, 2, 0, 66, 4, 32, 7, 1 }; // 使用LINQ和Lambda表达式查询数组中的偶数 int[] intEvens= ints.Where(p =gt; p % 2 == 0).ToArray(); // 使用LINQ和Lambda表达式查询数组中的奇数 int[] intOdds = ints.Where(p =gt; p % 2 != 0).ToArray(); // 输出 Console.WriteLine("偶数:" + string.Join(",", intEvens)); Console.WriteLine("奇数:" + string.Join(",", intOdds)); Console.ReadKey(); } }}
正如你在上面的例子中看到的,我们使用LINQ和Lambda表达式在一个语句中指定不同的查询条件。因此,LINQ使代码更加紧凑,可读性更好,也可以用来查询不同的数据源。看到这里,你可能会问:LINQ到底是什么?什么是LINQ将在下面详细解释。
二、什么是LINQ
长期以来,开发社区形成了以下模式:
1、面向对象与数据访问两个领域长期分裂,各自为政。2、编程语言中的数据类型与数据库中的数据类型形成两套不同的体系,例如:
# C #中的string由String数据类型表示。
SQL中的字符串由NVarchar/Varchar/Char数据类型表示。
3、SQL编码体验落后
没有智能感知效果。
没有严格的强类型和类型检查。
4、SQL和XML都有各自的查询语言,而对象没有自己的查询语言。
上述所有问题LINQ都能解决,那么LINQ到底是什么呢?
LINQ(语言集成查询)是语言集成查询。
LINQ是一组语言特性和API,使您能够以统一的方式编写各种查询。用于保存和检索不同数据源的数据,从而消除编程语言和数据库之间的不匹配,并为不同类型的数据源提供单一的查询接口。
由于LINQ总是使用对象,因此您可以使用相同的查询语法来查询和转换XML、对象集合、SQL数据库、ADO.NET数据集和任何其他可用的LINQ提供者格式的数据。
LINQ主要包括以下三个部分:
1、LINQ to Objects 主要负责对象的查询。2、LINQ to XML 主要负责XML的查询。3、LINQ to ADO.NET 主要负责数据库的查询。LINQ to SQLLINQ to DataSetLINQ to Entities
三、LINQ的优势
1.熟悉的语言:开发人员不必为每种类型的数据源或数据格式学习一种新的语言。
2.更少的代码:与传统方式相比,LINQ减少了要编写的代码量。
3.可读性:LINQ增加了代码的可读性,因此其他开发人员可以很容易地理解和维护它。
4.标准化查询方法:您可以使用相同的LINQ语法查询多个数据源。
5.类型检查:程序将在编译时提供类型检查。
6.智能感知提示:LINQ为普通藏品提供智能感知提示。
7.塑造数据:LINQ可以检索不同形状的数据。
就是这样。这篇关于语言综合查询LINQ的文章在这里。希望对大家的学习有所帮助
精彩评论