LINQ to DataSet needs to use System.Core.dll, System.Data.dll and System.Data.DataSetExtensions.dll, add references to System.Data and System.Data.DataSetExtensions in the project.
1. DataTable read list
DataSet ds = new DataSet(); // Omit the Fill code of ds 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(); // Omit the Fill code of ds 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 products select p.Field<string>("ProductName");
2. DataTable query
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 data sorting
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") descending select p;
4. Multiple DataTable queries
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") > 10m select new { ProductID = p.Field<int>("ProductID"), ProductName = p.Field<string>("ProductName"), CategoryName = c.Field<string>("CategoryName") };
5. DataTable grouping
var query = from p in ds.Tables["Product"].AsEnumerable() group p by p.Field<int>("CategoryID") into g select 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")); } }
Query the number of each CategoryID in Product:
var expr = from p in ds.Tables["Product"].AsEnumerable() group p by p.Field<int>("CategoryID") into g select new { CategoryID = g.Key, ProductsCount = g.Count() };