一起分享.net 3.5 之 Linq序列教程(1):概述、发展历史、入门
一、ling的概念
1、LINQ( Language Integrated Query )即语言集成查询
2、LINQ 就是是使用相同风格的代码去查询对象,查询和操作xml、数据库。
3、LINQ 主要包含以下三部分:
4、LINQ to Objects 主要负责对象的查询
5、LINQ to XML 主要负责 XML 的查询
6、LINQ to SQL 主要负责数据库的查询
二、linq能解决的问题
1、面向对象与数据访问两个领域长期分裂,很多对象关系模型框架就是设计来解决这个问题,比如NHibernate 、Hibernate等。 LINQ也可以当 对象关系模型使用。
2、使用了linq后对数据库的编程,基本也就不需要写sql,那同时也就不会有以下2个问题
1)、编程语言中的数据类型与数据库中的数据类型形成两套体系
2)、SQL 编码体验落后
1>、没有智能感应
2>、没有严格意义上的强类型和类型检查
3、对数据库的操作和对xml操作的方法不一样,使用linq可以统一操作
4、对 对象的查询, 从来没有过, 要查找只有遍历,linq也可以使用对对象的操作。
三、linq的发展历史
1、最初由 Anders Hejlsberg 构思,最初的研究计划称为 Cω
2、2005年9月 – 第一个为 C# 2.0 开发的技术预览版在当年的 PDC(微软开发者大会)上发布
3、2005年11月 – 更新至社区预览版(C# 2.0)
4、2006年1月 – 第一个为 VB 8.0 开发的技术预览版发布
5、2007年11月19日 – LINQ作为 .NET Framework 3.5 的一部分正式发布
四、Linq的工作环境
vs2008、.NET Framework 3.5 、C# 3.0
五、linq入门示例1 : 将数组中偶数取出来按大小排序
int[] intarr = { 2, 4, 5, 2, 6, 8, 9, 434324, 23, 55, 64, 1, 22, 34 };
//1、 使用传统方式实现【将数组中偶数取出来按大小排序】
List<int> lst = new List<int>();
foreach (var i in intarr)
{
if (i % 2 == 0)
lst.Add(i);
}
lst.Sort();
foreach (var item in lst)
{
Console.WriteLine(item);
}
//2、 使用 Linq中的查询语句方式实现【将数组中偶数取出来按大小排序】
var result = from i in intarr
where i % 2 == 0
orderby i
select i;
foreach (var item in result)
{
Console.WriteLine(item);
}
//3、 也可以使用 Linq中的查询方法方式来实现【将数组中偶数取出来按大小排序】
var result = intarr.Where(i => i % 2 == 0)
.OrderBy(i => i)
.Select(i => i);
foreach (var item in result)
{
Console.WriteLine(item);
}
六、linq入门示例2 : 提取ClassID=1的学生,按年龄排序
var stus = new List<Stu> {
new Stu{ID=1, Name="tom", Age=22, ClassID=1},
new Stu{ID=2, Name="jim", Age=20, ClassID=2},
new Stu{ID=3, Name="jike", Age=21, ClassID=1},
new Stu{ID=4, Name="heli", Age=25, ClassID=2}
};
//1、 使用传统方式实现【提取ClassID=1的学生,按年龄排序】
List<Stu> lst = stus.FindAll(delegate(Stu s)
{
return s.ClassID == 1;
}
);
//
lst.Sort(delegate(Stu s1, Stu s2)
{
return s1.Age.CompareTo(s2.Age);
}
);
foreach (var item in lst)
{
item.Print();
}
//2、 使用 Linq中的查询语句方式实现【提取ClassID=1的学生,按年龄排序】
var result = from s in stus
where s.ClassID == 1
orderby s.Age
select s;
foreach (var item in result)
{
item.Print();
}
//3、 也可以使用 Linq中的查询方法方式来实现【提取ClassID=1的学生,按年龄排序】
var result = stus.Where(s => s.ClassID == 1)
.OrderBy(s => s.Age)
.Select(s => s);
foreach (var item in result)
{
item.Print();
}