LINQ入门(下篇)

Dot.Net admin 229℃ 0评论

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
http://cnsendnet.taobao.com

 

到现在为止你还未触碰LINQ,那进来吧 —— LINQ入门(下篇)

终于来到下篇了,通过上篇,和中篇,我们了解了linq的基本语句,对应linq我们又了解到lambda表达式,静态扩展方法,以及linq的延迟加载的特性,那么在本篇文章中我们将分享学习一下linq对于我们开发中常用到的对象的操作应用。如果没有阅读过上篇的请点击这里,如果没有阅读中篇的请点击这里

linq to DataSet

对于做.net 开发的有谁不知道DataSet,DataTable,DataRow,DataColumn这些对象,如果你真的不知道,那好吧建议你到菜市场买2块豆腐撞死算了>_<。也许你会惊讶,哇靠!linq能操作这些?答案是肯定的。那么我们来看看linq是怎么操作的。

  1. 命名空间,如果需要linq操作DataSet,需要以下命名空间

using System.Data;

using System.Linq;

  2. 关键方法 AsEnumerable,该方法为一个静态扩展方法,他将DataTable转换为一个IEnumerable<DataRow>的序列

 

从这段代码看,并没有什么实质意义,如果这样去遍历datarow就是脱裤子放屁,多此一举。但是这样做的目只有一个为下面的linq操作做铺垫。

  3. linq DataRow 操作,以下举例一些linq特有的常用datarow操作

Distinct,顾名思义该方法返回的没有重复值的datarow序列

 

  1. linq DataColumn 操作

在了解了对datarow的操作后,我们再来了解一下对datacolumn的操作

Field<T> , 它是一个获取当前行(datarow)的某一列值的静态扩展方法,它具有三种重载参数,类型分别是DataColumn, String, Int,在这里建议大家使用string 类型参数,明确是取哪一列,语句阅读上更流畅。

 

  1. 导入xml文档,如果已知一个XML文本文件,我们需要获取这个xml文本文件XDocment对象时,可以执行改对象方法 Load,该方法具有八种参数重载,参数类型分别是StreamStringTextReaderXmlReader。下面的示例中使用的是 string 类型参数传递

XDocment xDoc = XDocument.Load(“demo.xml”);

  4. XNode 抽象基类,表示 XML 树中节点的抽象概念(元素、注释、文档类型、处理指令或文本节点),简单理解就是我们可以把XML的内容每一个部分都视为节点,也就是说它是类型的基类,并提供了大量的操作xml方法。

摘自MSDN:

XNode 是以下类型的抽象公共基类:

  • XComment
  • XContainer
  • XDocumentType
  • XProcessingInstruction
  • XText

XContainer 是以下类型的抽象公共基类:

  • XDocument
  • XElement

派生自 XContainer 的类的对象可以包含子节点。

  5. 常用遍历方法

DescendantNodes : 按文档顺序返回此文档或元素的子代节点集合。
Elements : 按文档顺序返回此元素或文档的子元素集合

var xDoc = XDocument.Load(“demo.xml”);

 

IEnumerable<XNode> nodex = xDoc.DescendantNodes();

IEnumerable<XElement> elems = xDoc.Elements();

当我们获取到到节点或者元素的序列后就可以对这些对象进行常规的LINQ操作,例如运用前两篇介绍的知识。

由于篇幅关系,这里就不逐一去讲解每个LINQ TO XMLAPI了,感兴趣的读者可以去msdn查阅System.Xml.Linq命名空间下的操作对象。

(吐槽)当我写完这篇文章时,自我感觉很枯燥,通篇介绍的都是API封装没有体现出LINQ的新意,想删掉这篇文章的冲动都有,但是一想既然我们要学习LINQ,这些东西还是需要适当了解与接触,所以还是硬着头皮写下来了,如果你能看完整篇文章,那真的非常感谢,感谢你的支持。

linq to xml 在效率上和 xml 的 xpath 差不了多少,所以在什么情况下怎么使用任君选择,并不需要强制使用的。

linq to dataset 小数据的时候可以这么干,但是数据量大时候,我建议不要这么干,首先要执行AsEnumberable这样一个耗时的方法划不来,不如直接上foreach遍历。

最终篇将和大家分享并讨论最受大家所熟知的LINQ TO SQL,还是希望大家给予一点期待吧。

感谢阅读,如果有说的不对的地方请指正,谢谢。

 

GPS平台、网站建设、软件开发、系统运维,找森大网络科技!
http://cnsendnet.taobao.com

转载请注明:森大科技官方博客 » LINQ入门(下篇)

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址