LINQtoDataSet如何實(shí)現(xiàn)查詢

這篇文章主要介紹了LINQ to DataSet如何實(shí)現(xiàn)查詢,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)公司長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鄂倫春企業(yè)提供專業(yè)的網(wǎng)站制作、網(wǎng)站設(shè)計(jì)鄂倫春網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

LINQ to DataSet主要是提供對(duì)離線數(shù)據(jù)的支持,只有在填充DataSet之后,我們才能使用LINQ to DataSet查詢數(shù)據(jù)。其功能主要是通過System.Data.DataRowExtions和System.Data.DataTableExtensions兩個(gè)靜態(tài)類中的擴(kuò)展方法來公開的。LINQ to DataSet是LINQ to ADO.Net中的一部分,但這部分所占比重非常小,內(nèi)容也比較少。

下面就讓我們首先來看看DataTableExtensions中的擴(kuò)展方法:

  1. public static EnumerableRowCollection<DataRow> 
    AsEnumerable(this DataTable source)  

  2.  

  3. public static DataView AsDataView(this DataTable table)  

  4. public static DataView AsDataView<T>
    (this EnumerableRowCollection<T> source) where T : DataRow  

  5.  

  6. public static DataTable CopyToDataTable<T>
    (this IEnumerable<T> source) where T : DataRow  

  7. public static void CopyToDataTable<T>(this IEnumerable<T> source,
    DataTable table,LoadOption options) where T : DataRow  

  8. public static void CopyToDataTable<T>(this IEnumerable<T> source,
    DataTable table,LoadOption options,FillErrorEventHandler errorHandler)
    where T : DataRow 

從定義中就可以看出這三類主要是提供DataTable、DataView和IEnumerable三者之間的轉(zhuǎn)換。大家都知道LINQ to Object查詢主要是對(duì)IEnumerable序列進(jìn)行的操作,這樣就使得DataTable、DataView和LINQ之間建立了一個(gè)轉(zhuǎn)換橋梁。

因此,在我們需要將DataTable應(yīng)用于LINQ to DataSet查詢是要先調(diào)用AsEnumerable完成DataTable到LINQ的轉(zhuǎn)換。如果我們需要將LINQ to DataSet查詢的結(jié)果進(jìn)行數(shù)據(jù)綁定時(shí)我們需要調(diào)用AsDataView的泛型版來完成LINQ到DataView的轉(zhuǎn)換。當(dāng)然我們也可以使用CopyToDataTable來進(jìn)行LINQ到DataTable的轉(zhuǎn)換。

注意:如果在我們完成了DataTable到LINQ(IEnumerable) 的轉(zhuǎn)換之后(也就是調(diào)用AsEnumerable擴(kuò)展方法),需要進(jìn)行兩個(gè)DataRow序列的集合操作如 Distinct,Union,Except,Intersect,SequenceEqual,這些操作都需要對(duì)數(shù)據(jù)源中的元素進(jìn)行相等比較,由于缺省情況下都是調(diào)用數(shù)據(jù)源中的元素的GetHashCode和Equals操作來判斷的,對(duì)于DataRow而言就是判斷對(duì)象的引用是否相等,這樣可能會(huì)導(dǎo)致我們不期望的結(jié)果(DataRow里面的數(shù)據(jù)內(nèi)容是相同的,但不是同一個(gè)對(duì)象),所以我們要使用 Distinct,Union,Except,Intersect,SequenceEqual帶IEqualityComparer的重載版本,使用 System.Data.DataRowComparer.Default作為參數(shù)。這個(gè)比較器類是.Net3.5專門為L(zhǎng)INQ to DataSet新增加的,用于比較DataRow的值的,它是通過先比較DataColumn的數(shù)量,然后使用該列中類型的Equals方法進(jìn)行比較。

不帶LoadOptions參數(shù)的CopyToDataTable方法將自動(dòng)為每一行的每一個(gè)字段創(chuàng)建(更新)原始版本和當(dāng)前版本,帶有 LoadOptions參數(shù)的CopyToDataTable重載版本可以讓你指定是創(chuàng)建(更新)原始版本或是當(dāng)前版本,或者兩者都填充。 LoadOptions選項(xiàng)有下面三個(gè)選項(xiàng)值可以選擇:
◆OverwriteChanges: 創(chuàng)建(更新)每一列的當(dāng)前值和原始值
◆PreserveChanges: 創(chuàng)建(更新)每一列的原始值
◆Upset: 創(chuàng)建(更新)每一列的當(dāng)前值

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“LINQ to DataSet如何實(shí)現(xiàn)查詢”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

分享名稱:LINQtoDataSet如何實(shí)現(xiàn)查詢
網(wǎng)站路徑:http://bm7419.com/article2/pscjic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、虛擬主機(jī)、、用戶體驗(yàn)、商城網(wǎng)站、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)