LINQ查询技术入门
LINQ简介
LINQ能够解决什么问题
在NET平台开发中,面向对象编程语言与数据访问方法长期分离,数据访问通过SQL进行查询,这种嵌入SQL语句的方式极容易出现错误。
SQL和XML都有各自的查询语言,而对象没有自己的查询语言。
再比如,要从List<T>
集合或数组中找到符合要求的元素,非常困难。
什么是LINQ
LINQ(Language Integrated Query,语言集成查询)
LINQ主要包含以下三个部分:
- LINQ to Objects主要负责对象的查询;
- LINQ to XML主要负责XML的查询;
- LINQ to ADO.NET主要负责数据库的查询;
- (1)LINQ to SQL;
- (2)LINQ to DataSet;
- (3)LINQ to Entities;
LINQ所在命名空间
- SyStem.Linq;该命名空间由系统自动引入。
使用和不使用LINQ查询的对比
-
不使用LINQ
#region 示例1:不使用LINQ查询 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; List<int> list = new List<int>(); foreach (int item in nums) { if (item %2 !=0) { list.Add(item); } } list.Sort(); list.Reverse(); foreach (int item in list) { Console.WriteLine(item); } Console.ReadLine(); #endregion
-
使用LINQ查询
#region 示例2:使用LINQ技术查询数组 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; var list = from num in nums where num % 2 != 0 orderby num descending select num; foreach (int item in list) { Console.WriteLine(item); } Console.ReadKey(); #endregion
LINQ查询简单、直观、明了。
LINQ查询方法
-
获取数据:扩展方法
Select()
Select()
是一个泛型扩展方法,Select
方法里面是一个Lambda
表达式,返回结果是一个迭代器(Iterator
)Select()
方法使用的时候,要求传递一个委托实例(委托实例就是一个方法)
Select()
方法应用#region 示例3:Select()方法应用 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; var list = nums.Select(item => item * item); foreach (int item in list) { Console.WriteLine(item); } Console.ReadKey(); #endregion
-
筛选数据:
Where()
方法Where()
方法是一个泛型扩展方法Where()
方法使用的时候要求传递一个委托实列,但该实例是一个判断条件,因此返回的类型必需是bool
类型
Where()
方法应用#region 示例4:Where()方法应用 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; var list = nums.Where(item => item % 2 == 0).Select(i => i * i); foreach (int item in list) { Console.WriteLine(item); } Console.ReadKey(); #endregion
-
排序数据:OrderBy()方法
- OrderBy()是一个扩展方法
- OrderBy()里面的参数要求传递一个排序的字段,默认按照升序排列
- 如果想降序排列可以使用OrderByDescending方法
OrderBy()方法应用
#region 示例5:OrderBy()方法应用 int[] nums = { 1, 8, 2, 321, 82, 93, 288, 29 }; var list = nums .Where(item => item % 2 == 0) .Select(i => i * i) .OrderByDescending(item => item); foreach (var item in list) { Console.WriteLine(item); } Console.ReadKey(); #endregion
字符串数组排序:
#region 示例6:字符串排序 string[] nums = { "张三", "李四", "王五器", "陈六", "钱七", "赵八" }; var list = nums .Where(item => item.Length == 2) .Select(item => item) .OrderBy(item => item.Substring(0, 1)); foreach (var item in list) { Console.WriteLine(item); } Console.ReadLine(); #endregion
-
分组数据:GroupBy()方法
- OrderBy()是一个扩展方法
- OrderBy()里面的参数要求从传递一个分组的字段
GroupBy()方法应用
#region 示例7: GroupBy()方法应用 string[] nums = { "张三", "李四", "王五器", "陈六", "钱七", "赵八" }; var list = nums .Where(item => item.Length == 2) .Select(item => item) .GroupBy(item => item.Substring(0, 1)); foreach (var groupitem in list) { Console.WriteLine("---------------"); Console.WriteLine("分组字段:{0}", groupitem.Key); foreach (var item in groupitem) // 内层循环遍历分组项 { Console.WriteLine(item); } } Console.ReadLine(); # endregion
-