第三章 LINQ to DataSets基本用法

  LINQ to DataSet需要使用System.Core.dll、System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System.Data和System.Data.DataSetExtensions。

  1. 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 products

select 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数据排序

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. 多个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") > 10m

 

            select 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 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"));

 

    }

 

}

    查询Product中每个CategoryID的数目:

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()

 

           };

原文地址:https://www.cnblogs.com/yuands/p/7475254.html