linq(to sql,to xml) 教程xx
LINQ初体验之LINQ to Object 1
一步一步学Linq to sql(一):预备知识 4
一步一步学Linq to sql(二):DataContext与实体 9
一步一步学Linq to sql(三):增删改 15
一步一步学Linq to sql(四):查询句法 21
一步一步学Linq to sql(五):存储过程 35
一步一步学Linq to sql(六):探究特性 46
一步一步学Linq to sql(七):并发与事务 53
一步一步学Linq to sql(八):继承与关系 60
一步一步学Linq to sql(九):其它补充 69
一步一步学Linq to sql(十):分层构架的例子 73
Linq To Xml学习 80
Linq To Xml学习 - 1. 概述 80
Linq To Xml学习 - 2 编程概述 82
C# 2008 学习笔记 - LINQ to XML 87
一、命名空间 87
二、编程方式创建XML文档 88
三、使用 LINQ 查询创建XML文档 89
四、加载和解析XML内容 90
六、遍历内存中的XML文档 90
七、修改 XML文档 92
使用linq to xml 快速创建自己的Rss 93
LINQ初体验之LINQ to Object
VS2008的发布,最激动人心的不过是LINQ的诞生。
What‘s LINQ? Language Integrated Query 是也。说得再明白一些,这是编程语言的一种新特性,能够将数据查询语句集成到编程语言中。目前,LINQ支持的语言有C# 和 VB。
为啥会有LINQ,主要还是因为现在的数据格式越来越多,数据库、XML、数组、哈希表……每一种都有自己操作数据的方式,学起来费事费力。于是,就有了LINQ诞生的理由——以一种统一的方式操作各种数据源,减少数据访问的复杂性。
LINQ带来很多开发上的便利。首先,他可以利用Visual Studio这个强大的IDE(这话决不是吹,Visual Studio绝对是最好用的开发工具之一),至少用Visual Studio来写SQL语句,可以有智能感知了,比起从前用查询分析器写存储过程的感觉好多了!其次,它可以把数据当成一个对象来操作,即 Data == Object? 的问题。
LINQ目前可以对XML, Object, SQL做数据访问,今后还会有LINQ to Entity的功能。
说来惭愧,我也是刚刚才接触LINQ,先从最简单的开始吧,做一个LINQ to Object的例子,实现一个对数组的操作。这个例子套用了今年TechED中海洋兄讲的例子,在此声明。
在这个例子中,我会先通过GetMethods的方法,拿到string的所有方法,接下来,就看LINQ的厉害了,这里是选出所有非静态的方法签名。
MethodInfo[] methods = typeof(string).GetMethods(); var result = from m in methods where m.IsStatic != true select m.Name; foreach (var r in result) { Console.WriteLine(r.ToString()); } Console.ReadLine(); |
例子虽然简单,确能从中看出LINQ的一些端倪。首先,var是什么东东?
看起来,有点像javascript里面的弱类型的变量声明。但是,C#writeline教程是强类型的,尽管你用var来声明,编译器还是可以根据上下文推倒出它当前的类型。比如这个例子里面,result就是IEnumerable 类型的。在这里面,写IEnumerable和写var是一样效果的,显然,var会简单得多。你不用考虑数据操作的返回值是什么类型,还能享受强类型声明带来的方便实惠……
还有from m in methods这句,m是什么东西,m是隐式声明的一个变量,尽管没有声明,但编译器根据上下文,推断出它的类型是MethodInfo型的!.NET Framework 3.5的编译器的确是聪明了很多 ^^
上面这个例子运行起来的结果中有很多重复的记录,我们可以用distinct()来过滤掉重复的,和SQL还是很相似的说。
var result = (from m in methods where m.IsStatic != true select m.Name).Distinct(); |
或者用group by 也可以
var result = from m in methods where m.IsStatic != true group m by m.Name; |
但是这样子写,在输出的时候,显示的是 System.Linq.Lookup`2+Grouping[System.String,System.Reflection.MethodInfo],所以,再做一些修改
var result = from m in methods where m.IsStatic != true group m by m.Name into g select new { MethodName = g.Key, Overload = g.Count() }; |
这里面又有一些新鲜的了——select new { MethodName = g.Key, Overload = g.Count() },先来看一个简单一些的例子:
class MyClass { public string MethodName { get; set; } public int Overload { get; set; } } class Program { MyClass mc = new MyClass { MethodName = "aaa", Overload = 2 }; } |
大括号里面的叫类初始化器,省去了构造函数,在new的同时,给对象的属性赋值。
这时候再回来看看select new { MethodName = g.Key, Overload = g.Count() },跟这个类初始化器很像吧,但是它更偷懒,new一个新对象,居然连类名都不写。没错,这就叫匿名类。不用写类的声明,直接实例化。类的名字是由编译器在编译的时候自动生成的,也就是说,你在new的时候根本不知道这个类叫啥名,因此,这里就只能用var了。这就更看出var的厉害了,不仅仅是写起来方便这么简单,在用到匿名类的时候,没有类名,这时候只能用var,嘿嘿!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论