LINQ To DataSet 示例


如果在項目遇到這樣的問題如:DataTable1和DataTable2需要根據一定的規則進行合並成一個DataTable3。

問題1:DataTable1不是讀數據庫表的結果,而是合成的數據集,因此無法用SQL語句組合查詢。

問題2:DataTable1與DataTable2本身就是非常繁瑣的查詢且結果集非常大,這樣如果DataTable1再與DataTable2

    組合查詢則很容易發生SQL執行超時。

遇到以上問題,第一個想法就是把兩個DataTable,取出放至內存中用嵌套遍歷的方式重組得到DataTable3.

.net推出LINQ后就可以用這種更簡潔易懂的類SQL語法的LINQ To DataTable 來解決以上問題。下面我例出幾個示例分享。

using System.Linq;
using System.Text;
using System.Data;

 

1.基本方法:

 DataSet ds = new DataSet();
   adapter.Fill(ds, "Customers");//讀數據庫略

   var result = from s1 in ds.Tables["Customers"].AsEnumerable()

                                 where s1.Field<string>("Region") == "SP"   //轉換成string后進行對比,如果為DBNull 則傳回空字符串
                                 select s1;

   foreach (var item in result)
           Console.WriteLine(item["CustomerID"]);
   Console.ReadLine();

 

2.指定DataRowVersion:

var result = from s1 in ds.Tables["Customers"].AsEnumerable()
                                 where !s1.IsNull("Region") && (string)s1["Region"] == "SP"
                                 select s1;

 

3. Join組合查詢:

 var result = from s1 in ds.Tables["Customers"].AsEnumerable()
                                 join s2 in ds.Tables["Orders"].AsEnumerable() on
                                 s1.Field<string>("CustomerID") equals s2.Field<string>("CustomerID")
                                 where s2.Field<DateTime>("OrderDate") > DateTime.Parse("1997/1/1") &&
                                       s2.Field<DateTime>("OrderDate") < DateTime.Parse("1997/5/31")
                                 select new
                                 {
                                     OrderID = s2.Field<int>("OrderID"),
                                     CustomerName = s1.Field<string>("CompanyName"),
                                     OrderDate = s2.Field<DateTime>("OrderDate")
                                 };

4.Group

  var result = from s in ds.Tables["Orders"].AsEnumerable()
                                 group s by s.Field<string>("CustomerID") into g
                                 select new
                                 {
                                     OrderID = g.First().Field<int>("OrderID"),
                                     CustomerID = g.Key
                                 };


5.返回前10行數據

var table = (from s1 in ds.Tables["Customers"].AsEnumerable() select s1).Take(10);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM