C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换
LINQ to DataSet需要使用System.Core.dll、System.Data.dll和System.Data.DataSetExtensions.dll,在項目中添加引用System.Data和System.Data.DataSetExtensions。
1. DataTable讀取列表
DataSet ds = new DataSet(); // 省略ds的Fill代碼 DataTable products = ds.Tables["Product"]; IEnumerable<DataRow> rows = from p in products.AsEnumerable()select p; foreach (DataRow row in rows) {Console.WriteLine(row.Field<string>("ProductName")); } DataSet ds = new DataSet(); // 省略ds的Fill代碼 DataTable products = ds.Tables["Product"]; var rows = products.AsEnumerable().Select(p => new{ProductID = p.Field<int>("ProductID"),ProductName = p.Field<string>("ProductName"),UnitPrice = p.Field<decimal>("UnitPrice")}); foreach (var row in rows) {Console.WriteLine(row.ProductName); } var products = ds.Tables["Product"].AsEnumerable(); var query = from p in productsselect p.Field<string>("ProductName");2. DataTable查詢
var rows = products.AsEnumerable().Where(p => p.Field<decimal>("UnitPrice") > 10m).Select(p => new{ProductID = p.Field<int>("ProductID"),ProductName = p.Field<string>("ProductName"),UnitPrice = p.Field<decimal>("UnitPrice")});3. DataTable數(shù)據(jù)排序
var rows = products.AsEnumerable().Where(p => p.Field<decimal>("UnitPrice") > 10m).OrderBy(p => p.Field<int>("SortOrder")).Select(p => new{ProductID = p.Field<int>("ProductID"),ProductName = p.Field<string>("ProductName"),UnitPrice = p.Field<decimal>("UnitPrice")}); var expr = from p in products.AsEnumerable()orderby p.Field<int>("SortOrder")select p; IEnumerable<DataRow> rows = expr.ToArray(); foreach (var row in rows) {Console.WriteLine(row.Field<string>("ProductName")); } var expr = from p in ds.Tables["Product"].AsEnumerable()orderby p.Field<int>("SortOrder"), p.Field<string>("ProductName") descendingselect p;4. 多個DataTable查詢
var query = from p in ds.Tables["Product"].AsEnumerable()from c in ds.Tables["Category"].AsEnumerable()where p.Field<int>("CategoryID") == c.Field<int>("CategoryID")&& p.Field<decimal>("UnitPrice") > 10mselect new{ProductID = p.Field<int>("ProductID"),ProductName = p.Field<string>("ProductName"),CategoryName = c.Field<string>("CategoryName")};5. DataTable分組
var query = from p in ds.Tables["Product"].AsEnumerable()group p by p.Field<int>("CategoryID") into gselect new{CategoryID = g.Key,Products = g};foreach (var item in query) {Console.WriteLine(item.CategoryID);foreach (var p in item.Products){Console.WriteLine(p.Field<string>("ProductName"));} }查詢Product中每個CategoryID的數(shù)目:
var expr = from p in ds.Tables["Product"].AsEnumerable()group p by p.Field<int>("CategoryID") into gselect new{CategoryID = g.Key,ProductsCount = g.Count()};?
DataTable與Linq相互轉(zhuǎn)換
DataTable通過dt.AsEnumerable()方法轉(zhuǎn)換可用Linq查詢,反之,Linq也可以轉(zhuǎn)化為DataTable
DataTable newDt = query1.CopyToDataTable<DataRow>();
var query1 =
??? from stu in dtStu.AsEnumerable()
??? from score in dtScore.AsEnumerable()
??? where stu.Field<int>("ScoreID") == score.Field<int>("ScoreID")
??? where (int)stu["Age"] > 20
??? select stu;
//通過CopyToDataTable()方法創(chuàng)建新的副本
DataTable newDt = query1.CopyToDataTable<DataRow>();
?foreach (var item in newDt.AsEnumerable())??
?{??
???? System.Console.WriteLine(item["Name"]);??
}
?
轉(zhuǎn):LINQ系列:LINQ to DataSet的DataTable操作
DataTable與Linq相互轉(zhuǎn)換
?
轉(zhuǎn)載于:https://www.cnblogs.com/wangfuyou/p/6956759.html
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1022: [SHOI2008]小约翰的
- 下一篇: API接口认证