终于来到下篇了,通过上篇,和中篇,我们了解了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 ();//去重复 IEnumerable distinctRows=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 (); IEnumerable rows2=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 (); IEnumerable rows2=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 (); IEnumerable rows2=dt2.AsEnumerable ();//合并rows1与rows2 var row3=rows1。联盟(rows2 DataRowComparer.Default); foreach (var row3行) Console.WriteLine(行[A] .ToString ());//结果//1//2//3 详解LINQ入门(下篇)