亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Linq To DataSet

2019-11-17 02:33:08
字體:
來源:轉載
供稿:網友

Linq To DataSet

相對而言,LINQ TO DataSet是LINQ技術中最小的一塊,雖然是DB中抽取出來的一個離線的操作模型,但畢竟對象也是個內存里面的object而已。所以和LINQ TO Object相比,大多數的操作都是一樣的,不同只是要根據DataSet,DataTable的結構標明字段而已。下面簡單的列出LINQ TO DataSet相比LINQ TO Object一些要注意的特色。

Query UnTyped DataSet

和一般的LINQ相比,query對象是untyped DataSet的時候,使用Field<T>和SetField<T>來讀寫不同的column字段,下面是一個簡單的例子:

DataTable orders = ds.Tables["Orders"];

DataTable orderDetails = ds.Tables["OrderDetails"];

var query =

from o in orders.AsEnumerable()

where o.Field<DateTime>( "OrderDate" ).Year >= 1998

orderby o.Field<DateTime>( "OrderDate" ) descending

select o;

在這里大致要注意三點

1.因為untyped DataSet沒有實現IEnumerable<T> 和 IQueryable<T>的interface,所以如果想把它作為一個可以查詢的對象的話,要先用AsEnumerable() 或者AsQueryable()轉換一下,將它轉換成IEnumerable<T>或者IQueryable<T>對象才能用LINQ去查詢。如:from o in orders.AsEnumerable()

2.一般是使用使用Field<T>(“Column A”)和SetField<T>(“Column A”)來讀寫不同的column字段對應的element,用它來訪問相對于以前我們用ds.Tables["Orders"].Row[“RowA”][ “Column A”]的訪問模式比起來,一個很大的好處就是可以避免null類型產生的exception。我們以前從DataSet里面取數據的時候,如果取的出來的是null,就會拋出exception,所以我們經常作類似if(ds.Tables["Orders"].Row[“RowA”][ “Column A”]!=null)的判斷來包裝我們進一步的邏輯處理,但是用Field<T>(“Column A”)就可以避免這種麻煩。因為Field<T>(“Column A”)是nullable的。這個特性的由來是<T>這個泛型的使用,比如你取int類型數據的時候,如果你覺得它可能是null,那你就可以用Field<int?>(“Column A”)去取,這樣就可以避免了exception的拋出。

3 .Field<T>和SetField<T>是使用并不局限在LINQ 的query當中,在程序的其他地方也能使用,可以用它去替代以前的我們訪問DataSet的方式,例如:

foreach( DataRow r in orderDetails.Rows ) {

if (r.Field<decimal>( "Unit

r.SetField<decimal>( "UnitPrice", 10 );

}

}

Query Typed DataSet

這就更加簡單了。對于定義了類型的DataSet,我們可以象查詢內存中一般的object那樣去查詢它。例如:

var query =

from o in ds.Orders

where o.OrderDate.Year >= 1998

orderby o.OrderDate descending

select new { o.OrderID, o.OrderDate,

Amount = o.GetOrder_DetailsRows().Sum(

od => od.UnitPrice * od.Quantity ) };

還有一個與untyped DataSet不同的地方是在查詢它的時候不需要使用AsEnumerable() 或者AsQueryable()那樣的轉換方法了。因為所有定義好的DataSet都是繼承了TypedTableBase<T>這個基類,而這個基類已經實現了IEnumerable<T>的interface

Query DataSet中的relation

DataSet當中有時候也是有relation的,和DB一樣,例如在下面的DataSet中加入relation:

DataTable orders = ds.Tables["Orders"];

DataTable orderDetails = ds.Tables["OrderDetails"];

ds.Relations.Add( "OrderDetails",

orders.Columns["OrderID"],

orderDetails.Columns["OrderID"]);

如果我們想像在LINQ TO SQL里面一樣通過relation來訪問與其有相關關系的table,可以使用GetChildRows方法來取得與當前table相關聯的那個table里面的DataRows,并將其返回為可以查詢的IQueryable<T>對象。例如:

var query =

from o in orders.AsEnumerable()

where o.Field<DateTime>( "OrderDate" ).Year >= 1998

orderby o.Field<DateTime>( "OrderDate" ) descending

select new { OrderID = o.Field<int>( "OrderID" ),

OrderDate = o.Field<DateTime>( "OrderDate" ),

Amount = o.GetChildRows( "OrderDetails" ).Sum(

od => od.Field<decimal>( "UnitPrice" )

* od.Field<short>( "Quantity" ) ) };

這樣我們就能通過relation來訪問對象table了。

來源: <http://www.49028c.com/ruciffa/archive/2008/03/08/1096007.html>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久躁日日躁aaaaxxxx| 日本精品视频在线播放| 国产精品午夜视频| 国产精品成人一区二区三区吃奶| 日韩av在线直播| 在线观看日韩av| 一区二区在线视频播放| 日韩在线一区二区三区免费视频| 97婷婷涩涩精品一区| 亚洲精品xxxx| 国内精品久久久久久| 亚洲影院在线看| 亚洲色无码播放| 国产国语videosex另类| 亚洲欧美日韩天堂| 久久久精品久久久久| 色综合久综合久久综合久鬼88| 一本一道久久a久久精品逆3p| 久久精品在线播放| 欧美成人精品激情在线观看| 亚洲精品国产福利| 国产日韩欧美视频| 国产精品久久久久9999| 国产一区二区三区高清在线观看| 岛国av一区二区三区| 国产精品自产拍在线观| 日韩中文在线视频| 久久人人97超碰精品888| 国产精品中文在线| 久久久久久成人精品| 亚洲视频免费一区| 一本大道香蕉久在线播放29| 久久夜色精品亚洲噜噜国产mv| 国产精品一区二区电影| 亚洲精品成人免费| 77777少妇光屁股久久一区| 国产中文字幕亚洲| 欧美激情视频网| 久久免费在线观看| 色婷婷av一区二区三区久久| 日韩av最新在线观看| 国产热re99久久6国产精品| 亚洲人成网站777色婷婷| 国产欧美一区二区三区四区| 亚洲综合一区二区不卡| 91影视免费在线观看| 欧美极品第一页| 一区二区三区四区视频| 国产91精品不卡视频| 久久国产精品久久久久久| 欧美日韩999| 久久久亚洲网站| 国产成人精品日本亚洲专区61| 欧美视频在线观看 亚洲欧| 欧美精品在线观看| 在线播放国产一区中文字幕剧情欧美| 成人写真视频福利网| 亚洲视频在线观看| 久久久久久久久久久免费| 国产亚洲一级高清| 国产欧美一区二区三区久久| 欧美精品在线极品| 欧美福利小视频| 亚洲国产精品热久久| 一本大道久久加勒比香蕉| 国产精品狠色婷| 欧美在线免费看| 亚洲三级 欧美三级| 中文亚洲视频在线| 欧美电影在线免费观看网站| 国产成人在线精品| 色偷偷88888欧美精品久久久| 久久av.com| 亚洲欧美日韩一区二区在线| 久久伊人精品一区二区三区| 美女999久久久精品视频| 欧美韩日一区二区| 欧美一区二区三区图| 亚洲欧美第一页| 最近中文字幕mv在线一区二区三区四区| 日本一区二三区好的精华液| 亚洲激情视频在线播放| 亚洲精品99999| 国产精品精品视频一区二区三区| 国产免费久久av| 久久精品视频网站| 97在线视频国产| 国产精品xxx视频| 日韩久久精品成人| 欧美激情免费观看| 欧美在线激情视频| 日韩精品在线观看网站| 欧美另类老女人| 欧美激情欧美狂野欧美精品| 国产精品久久久久久搜索| 色妞在线综合亚洲欧美| 国产精品欧美在线| 国产成人亚洲综合91| 亚洲成人xxx| 久久国产精品久久久久| 国产精品久久久久久av福利软件| 国产一区二区三区在线看| 久久久午夜视频| 中文字幕精品在线| 欧美黑人国产人伦爽爽爽| 国产精品亚洲自拍| 久久偷看各类女兵18女厕嘘嘘| 亚洲性69xxxbbb| 国内免费久久久久久久久久久| 91在线网站视频| 日韩av电影院| 精品视频9999| 456亚洲影院| 久久精品成人欧美大片| 亚洲女人被黑人巨大进入al| 欧美激情视频网| 日韩精品丝袜在线| 国产精品视频xxxx| 91精品在线一区| 欧美一级电影在线| 久久不射热爱视频精品| 国产精品爽爽爽| 亚洲欧洲第一视频| 另类图片亚洲另类| 国模视频一区二区| 日韩福利伦理影院免费| 日本久久久久久久久久久| 中文字幕日本精品| 日韩av在线不卡| 欧美激情一区二区久久久| 一区二区欧美激情| 国产精品久久久久免费a∨大胸| 国产成人精品久久亚洲高清不卡| 国产精品久久久久aaaa九色| 日韩精品极品视频| 国产精自产拍久久久久久| 成人淫片在线看| 97精品久久久中文字幕免费| 美女撒尿一区二区三区| 国产精品伦子伦免费视频| 亚洲欧美制服中文字幕| 91精品国产自产在线观看永久| 亚洲男人的天堂网站| 国产欧美婷婷中文| 欧美激情亚洲精品| 色婷婷综合久久久久| 国产日韩欧美在线看| 亚洲国产婷婷香蕉久久久久久| 国产成人拍精品视频午夜网站| 日韩精品福利在线| 国产精品视频资源| 亚洲一二在线观看| 日韩成人在线电影网| 国产区精品视频| 亚洲精品国产精品久久清纯直播| 国产成人一区二区在线| 日本午夜在线亚洲.国产| 怡红院精品视频| www日韩中文字幕在线看| 久久精品中文字幕| 国产精品7m视频| 亚洲最大福利视频| 国产玖玖精品视频| 亚洲无亚洲人成网站77777|