项目中加入了很多新内容的学习,LINQ就是非常简单却实用的内容,让我们对数据的操做更加便捷。接下来就和大家简单的介绍一下LINQ。
一、概述
LinQ(Language-Integrated Query,语言集成查询)可以为C#和VB提供强大的查询功能。LinQ引入了标准的、易于学习的查询和更新数据模式,可以对其技术进行扩展以支持几乎任何类型的数据存储。VS包含LINQ提供程序的程序集,这些程序集支持将LINQ与.NET Framework集合、sql sever数据库、ADO.NET数据集合XML文档一起使用,从而在对象领域和数据领域之间架起了一座桥梁,解决了面对对象与数据访问两个领域长期分裂,各自为政的问题。
LINQ主要包括LINQ to SQL、LINQ to DataSet、LINQ to Object和LINQ to XML四种关键技术。
二、优点
使用LINQ有很多优点,解决了SQL编码体验落后的弊端,能够更加方便高效的解决问题。
1、无需复杂学习过程即可上手
2、编写更少代码即可创建完整应用。
3、更快开发错误更少的应用程序。
4、无需求助编程技巧就可合并数据源。
5、让新开发者开发效率更高。
三、实战应用
对LINQ有了一个简单的了解, 让我们来用几个实例来阐述一下它的主要应用方法。
1、基本方法:选择、排序、分组
首先,声明一个集合:
//person泛型集合
List<string> person = new List<string>();
person.Add("zhang san");
person.Add("zhang sisi");
person.Add("li si");
person.Add("wang wu");
person.Add("wang huanhuan");
person.Add("li hong");
person.Add("xu jinglei");
person.Add("zhang xinyu");
基本方法:
1、输出所有元素
var result = person.Select(p => p);
//2、输出开头是2的人
var result = person.Where(p => p.StartsWith("z"));
var result = person.Select(p => p).Where(p => p.StartsWith("z"));
var result = person.Where(p => p.StartsWith("z")).Select(p => p);
//3、排序
//首字母排序
var result = person.OrderBy(p => p);
//按照名字最后一个字母排序
var result = person.OrderBy(p => p.Substring(p.Length - 1, 1)).Select(p => p);
//4、分组 按照姓名来分组--取出姓名中的空格前的部分
var result = person.GroupBy(p => p.Split(new char[] { ' ' })[0]);
foreach (var group in result)
{
Console.WriteLine("姓:" + group.Key);
foreach (var name in group)
{
Console.WriteLine("\t" + name);
}
Console.WriteLine();
}
}
2、高级查询方法
·聚合类:count、Max/Min、Average
·排序类:thenBy
·分区类:Take、TakeWhile、Skip、SkipWhile
·集合类:Distinct
·生成类:Range、Repeat
int[] arr = { 343, 45, 45, 67, 6, 7, 453, 34, 76, 4564, 345, 3, 5 };
//高级方法
//1、聚合类
Console.WriteLine("arr的最大值" + arr.Max()); //4546
Console.WriteLine("arr的最小值" + arr.Min()); //3
Console.WriteLine("arr的平均值" + arr.Average ()); //平均值
Console.WriteLine("arr的和" + arr.Sum()); //求和
Console.WriteLine("arr的个数" + arr.Count()); //个数
//2、排序类
var result = arr.OrderBy(p => p.ToString().Substring(0, 1));
var result = arr.OrderBy(p=>p.ToString().Substring(0,1)).ThenBy(p=>p); //二次排序
//分区类
var result = arr.Skip(3).Take(3); //跳过3个值,取三个值
var result = arr.SkipWhile(p => p > 7); //6, 7, 453, 34, 76, 4564, 345, 3, 5
var result = arr.TakeWhile(p => p > 7); // 343, 45, 45, 67
var result = System.Linq.Enumerable.Range(10,50); //生成连续序列 --生成类
var result = System.Linq.Enumerable.Repeat(10, 50); //生成重复序列--生成类