溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LINQ to DataSet如何實現查詢

發(fā)布時間:2021-12-01 10:11:08 來源:億速云 閱讀:118 作者:小新 欄目:編程語言

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

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

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

  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三者之間的轉換。大家都知道LINQ to Object查詢主要是對IEnumerable序列進行的操作,這樣就使得DataTable、DataView和LINQ之間建立了一個轉換橋梁。

因此,在我們需要將DataTable應用于LINQ to DataSet查詢是要先調用AsEnumerable完成DataTable到LINQ的轉換。如果我們需要將LINQ to DataSet查詢的結果進行數據綁定時我們需要調用AsDataView的泛型版來完成LINQ到DataView的轉換。當然我們也可以使用CopyToDataTable來進行LINQ到DataTable的轉換。

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

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

感謝你能夠認真閱讀完這篇文章,希望小編分享的“LINQ to DataSet如何實現查詢”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業(yè)資訊頻道,更多相關知識等著你來學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI