详解LINQ入门(下篇)

  

  

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

  

  

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

  

1。命名空间,如果需要linq操作数据集,需要以下命名空间

        使用System.Data;   使用来;      

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

        var/dt=new DataTable ();   dt.Columns。添加(“A”, typeof (int));      var newRow1=dt.NewRow ();   var newRow2=dt.NewRow ();      newRow1 [A]=1;   newRow2 [A]=2;      dt.Rows.Add (newRow1);   dt.Rows.Add (newRow2);//重点看这里   IEnumerable行=dt.AsEnumerbale ();      foreach(行行)   Console.WriteLine(行[A] .ToString ());      之前      

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

  

3。linq对我们操作,以下举例一些linq特有的常用我们操作

  

截然不同,顾名思义该方法返回的没有重复值的我们应该序列

        var/dt=new DataTable ();   dt.Columns。添加(“A”, typeof (int));      var newRow1=dt.NewRow ();   var newRow2=dt.NewRow ();      newRow1 [A]=1;   newRow2 [A]=2;   newRow3 [A]=2;      dt.Rows.Add (newRow1);   dt.Rows.Add (newRow2);   dt.Rows.Add (newRow3);//重点看这里   IEnumerable行=dt.AsEnumerbale ();//去重复   IEnumerabledistinctRows=rows.Distinct (DataRowComparer.Default);      foreach (var distictRows行)   Console.WriteLine(行[A] .ToString ());//结果//1//2      之前      

注意,这里的DataRowComparer是一个静态类,属性默认表示返回单一的我们应该实例

  

除了找到我们序列一个中在我们序列B中没有的我们应该序列

        var dt?=new DataTable ();   dt1.Columns。添加(“A”, typeof (int));      var dt2=new DataTable ();   dt2.Columns。添加(“A”, typeof (int));      dt1.Rows。添加(新对象[]{1});   dt1.Rows。添加(新对象[]{2});      dt2.Rows。添加(新对象[]{2});   dt2.Rows。添加(新对象[]{3});//重点看这里   IEnumerablerows1=dt1.AsEnumerable ();   IEnumerablerows2=dt2.AsEnumerable ();//获取rows1中在rows2里没有包含的我们应该序列   var rows3=rows1。(rows2, DataRowComparer.Default除外);      foreach (var rows3行)   Console.WriteLine(行[A] .ToString ());//结果//1   之前      

相交,两个我们序列的交集

        var dt?=new DataTable ();   dt1.Columns。添加(“A”, typeof (int));      var dt2=new DataTable ();   dt2.Columns。添加(“A”, typeof (int));      dt1.Rows。添加(新对象[]{1});   dt1.Rows。添加(新对象[]{2});      dt2.Rows。添加(新对象[]{2});   dt2.Rows。添加(新对象[]{3});//重点看这里   IEnumerablerows1=dt1.AsEnumerbale ();   IEnumerablerows2=dt2.AsEnumerbale ();//获取rows1与rows2共有的我们应该序列   rows1。相交(row2 DataRowComparer.Default);      foreach (var rows1行)   Console.WriteLine(行[A] .ToString ());//结果//2      之前      

联盟合并两个我们序列

        var dt?=new DataTable ();   dt1.Columns。添加(“A”, typeof (int));      var dt2=new DataTable ();   dt2.Columns。添加(“A”, typeof (int));      dt1.Rows。添加(新对象[]{1});   dt1.Rows。添加(新对象[]{2});      dt2.Rows。添加(新对象[]{2});   dt2.Rows。添加(新对象[]{3});//重点看这里   IEnumerablerows1=dt1.AsEnumerable ();   IEnumerablerows2=dt2.AsEnumerable ();//合并rows1与rows2   var row3=rows1。联盟(rows2 DataRowComparer.Default);      foreach (var row3行)   Console.WriteLine(行[A] .ToString ());//结果//1//2//3      

详解LINQ入门(下篇)