您好,欢迎访问一九零五行业门户网

使用LinQ实现对数据对象的查询

因为项目需要,接触到了linq,经过一段时间的学习,对linq有了简单的认识,本文就这个话题做个简单的叙述。 首先,应该写出几个问题,从宏观上了解一下。linq是什么?为什么使用linq?使用它有什么好处? 语言集成查询(language intergrated query),是一
因为项目需要,接触到了linq,经过一段时间的学习,对linq有了简单的认识,本文就这个话题做个简单的叙述。
首先,应该写出几个问题,从宏观上了解一下。linq是什么?为什么使用linq?使用它有什么好处?
语言集成查询(language intergrated query),是一组用于c#和vb语言的扩展,它允许编写c#或者vb代码以查询数据库相同的方式操作内存数据。----百度百科
通俗点说,它就是查询数据的。那么为什么要用它来查询数据呢,使用它有什么有点吗?
我们从稍微抽象一点的角度来考虑这个问题。面向对象的编程和数据访问的割裂:一面向对象的语言和数据库有两套完全不相干的数据类型体系,编程语言中的string,在数据库中就是varchar,这完全没有统一性可言;二 sql编码体验落后,我们编写sql的语句,没有提示语句,只有写完了,才知道是否正确,客户体验度差;三各类查询语言不一致,xml和数据库都有各自的数据查询体系,对象没有自己的查询体系。基于以上种种问题,linq出现了。
组成上面也提到了,linq包括三类内容的查询,对象,xml文件和数据库。对数据库的查询分为三个部分:
linq to sql,
linq to dataset,
linq to entities。
喎?http://www.2cto.com/kf/ware/vc/ target=_blank class=keylink>vcd4kpha+icagicagiccy6dgvt73kvao6tgluublp0a/k/b7d09dbvdbwt73kvaos0+/r1llp0a+6zbe9t6iy6dgvcqgjsunrr9pvvutktdpdwoamiziwmjg0o9pau1fm0+++5lxe0m7kvblp0a+jrnxi1ta3vcq9v8m2wddux78ko6y1q8rhz97wxr3ptucjrlbu09q24mz1vp6y6dgvutze0cq1z9aho7lp0a+3vbeot73kvao61elw1re9yr2/ybbb0nsyu8e/o6y1q8rhv8ns1mq1z9a63lbgultu07xesunrr9kqx/ojrnlyzqro0sphv8ns1l2rsunrr8z1vp61pbba1/bsu7j2t723qmilyrxp1qgjzaizo8fpv/ajrm6qwcu0+slrtcs/ybbb0nsjrm7sw8fk18/i06a4w7+8wsfkudpdsunrr9pv0ds3vcq9o6zi57n7sunrr9pv0dte0dluyrxp1qos06a4w72rsunrr9pv0ds6zblp0a+3vbeoveg6z8bwwls77lhgyrntw6os1elr+bzi1+6087uvtctktc/wwcu0+slrv8m2wdduo6zsstt2x7/by7lp0a+5pstcoam8l3a+cjxwpibsaw5xtcs8unbwun+8trlp0a+3vbeoo7o8l3a+cjxwpr7bus+juk1hecxnaw4sq291bnqsu3vttcijuzwvcd4kpha+xcxq8qo6vghlbkj5le9yzgvyqnm1yko7pc9wpgo8cd631sf4o7puywtllfnraxasvgfrzvdoawxllfnraxbxaglszbxio7s8l3a+cjxwpryvus+jukrpc3rpbmn0pc9wpgo8cd7j+rpjo7psyw5nzsxszxblyxq8l3a+cjxwigxhbmc9en-us>
下面是几个linq查询示例:
1基于语言、方法混编查询的方式(linq to objects):
private void btnquery_click(object sender, eventargs e) { //linq to object 基本方法部分 //泛型集合数据 person list person = new list(); person.add(老 大); person.add(老 二); person.add(老 三); person.add(老 四); person.add(老 五); person.add(小 六); person.add(小 七); person.add(小 八); ////输出person 所有元素 //var result = from p in person select p; //输出person中所有以老开头的人 //语句、方法混编模式,使用语句查询,使用方法筛选 var result = (from p in person select p).where(p => p.startswith(老)); //打印 result.print(); } public static void print(this ienumerable ie) { //获取可遍历的接口 ienumerator result = ie.getenumerator(); while (result.movenext()) { console.writeline(\n------------------------\n); console.writeline(result.current); console.writeline(\n------------------------\n); } }
这段代码首先定义了一个泛型集合对象person,然后使用查询语句和查询费昂发混编模式查询出以“老”开头的人,然后打印出来。查询语句不能完成所有的查询功能,需要借助查询方法来筛选,本例中的查询方法为系统提供。可以看出来,查询语句可读性强,但是功能不够强大,查询方法可读性不强,功能比较多。
2 基于查询方法模式(linq to objects) private void btnselect_click(object sender, eventargs e) { //linq to object 基本方法部分 //泛型集合数据 person list person = new list(); person.add(老 大); person.add(老 二); person.add(老 三); person.add(老 四); person.add(老 五); person.add(小 六); person.add(小 七); person.add(小 八); //方法四 调用外部复杂方法作为查询条件 var result = person.where(p => judge(p)); } public bool judge(string s) { if (s.startswith(老)) { return true; } else { return false; } }
本段代码功能同上,完全使用查询方法完成了筛选功能,这个方法不同于上例中的方法,此方法是重新定义的方法。
3 基于数据库的查询(linq to entities) public actionresult index() { //1 使用linq语句获取实体数据 //查询条件中使用了lambda表达式 list list = (from b in db.blogarticle where b.aisdel ==false select b).tolist (); //2 使用viewdata获取数据 viewdata[datalist] = list; // 3 加载视图 list.print(); } public partial class blogarticle { 实体代码:略 }
 
本例中,我们只是将数据对象替换成了实体集合,基本语法相同。
优点:书写简单,容易上手。以对象的形式查询数据,配合查询语句和查询方法的使用,是数据查询更加直观。
缺点:linq使用延迟加载功能,将待操作数据放入内存中,占用了大量资源,造成资源浪费。
其它类似信息

推荐信息