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

1. DataTable读取列表

  1. DataSet ds = new DataSet();
  2. // 省略ds的Fill代码
  3. DataTable products = ds.Tables["Product"];
  4. IEnumerable<DataRow> rows = from p in products.AsEnumerable()
  5. select p;
  6. foreach (DataRow row in rows)
  7. {
  8. Console.WriteLine(row.Field<string>("ProductName"));
  9. }
  1. DataSet ds = new DataSet();
  2. // 省略ds的Fill代码
  3. DataTable products = ds.Tables["Product"];
  4. var rows = products.AsEnumerable()
  5. .Select(p => new
  6. {
  7. ProductID = p.Field<int>("ProductID"),
  8. ProductName = p.Field<string>("ProductName"),
  9. UnitPrice = p.Field<decimal>("UnitPrice")
  10. });
  11. foreach (var row in rows)
  12. {
  13. Console.WriteLine(row.ProductName);
  14. }
  1. var products = ds.Tables["Product"].AsEnumerable();
  2. var query = from p in products
  3. select p.Field<string>("ProductName");

2. DataTable查询

  1. var rows = products.AsEnumerable()
  2. .Where(p => p.Field<decimal>("UnitPrice") > 10m)
  3. .Select(p => new
  4. {
  5. ProductID = p.Field<int>("ProductID"),
  6. ProductName = p.Field<string>("ProductName"),
  7. UnitPrice = p.Field<decimal>("UnitPrice")
  8. });

3. DataTable数据排序

  1. var rows = products.AsEnumerable()
  2. .Where(p => p.Field<decimal>("UnitPrice") > 10m)
  3. .OrderBy(p => p.Field<int>("SortOrder"))
  4. .Select(p => new
  5. {
  6. ProductID = p.Field<int>("ProductID"),
  7. ProductName = p.Field<string>("ProductName"),
  8. UnitPrice = p.Field<decimal>("UnitPrice")
  9. });
  1. var expr = from p in products.AsEnumerable()
  2. orderby p.Field<int>("SortOrder")
  3. select p;
  4. IEnumerable<DataRow> rows = expr.ToArray();
  5. foreach (var row in rows)
  6. {
  7. Console.WriteLine(row.Field<string>("ProductName"));
  8. }
  1. var expr = from p in ds.Tables["Product"].AsEnumerable()
  2. orderby p.Field<int>("SortOrder"), p.Field<string>("ProductName") descending
  3. select p;

4. 多个DataTable查询

  1. var query = from p in ds.Tables["Product"].AsEnumerable()
  2. from c in ds.Tables["Category"].AsEnumerable()
  3. where p.Field<int>("CategoryID") == c.Field<int>("CategoryID")
  4. && p.Field<decimal>("UnitPrice") > 10m
  5. select new
  6. {
  7. ProductID = p.Field<int>("ProductID"),
  8. ProductName = p.Field<string>("ProductName"),
  9. CategoryName = c.Field<string>("CategoryName")
  10. };

5. DataTable分组

  1. var query = from p in ds.Tables["Product"].AsEnumerable()
  2. group p by p.Field<int>("CategoryID") into g
  3. select new
  4. {
  5. CategoryID = g.Key,
  6. Products = g
  7. };
  8.  
  9. foreach (var item in query)
  10. {
  11. Console.WriteLine(item.CategoryID);
  12. foreach (var p in item.Products)
  13. {
  14. Console.WriteLine(p.Field<string>("ProductName"));
  15. }
  16. }

查询Product中每个CategoryID的数目:

  1. var expr = from p in ds.Tables["Product"].AsEnumerable()
  2. group p by p.Field<int>("CategoryID") into g
  3. select new
  4. {
  5. CategoryID = g.Key,
  6. ProductsCount = g.Count()
  7. };

DataTable与Linq相互转换

DataTable通过dt.AsEnumerable()方法转换可用Linq查询,反之,Linq也可以转化为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()方法创建新的副本
DataTable newDt = query1.CopyToDataTable<DataRow>();
 foreach (var item in newDt.AsEnumerable())  
 {  
     System.Console.WriteLine(item["Name"]);  
}

转:LINQ系列:LINQ to DataSet的DataTable操作

DataTable与Linq相互转换

C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换的更多相关文章

  1. LINQ系列目录

    1. LINQ准备 1.1 C#中与LINQ相关特性 2. LINQ to Object 2.1 LINQ to Object投影操作符(Select/SelectMany/Let) 2.2 LINQ ...

  2. Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解

    返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...

  3. LINQ系列:LINQ to ADO.NET概述

    LINQ to ADO.NET 包括两种独立的技术: LINQ to DataSet 和 LINQ to SQL. 使用 LINQ to DataSet 可以对DataSet 执行丰富而优化的查询,而 ...

  4. 白话LINQ系列1---什么是LINQ?

    一.本系列目标 1.理解LINQ: 2.能写得复杂的LINQ语句(比如:动态查询): 3.理解表达式树及相关概念: 4.熟练运用LINQ写出优美的代码(希望一起努力,最终达到): 二.LINQ为何物? ...

  5. DataTable的筛选,过滤后绑定数据源的两种方法(DataTable的select和使用linq返回List集合)

    一般数据处理使用DataTable的情况会很多,而我们很多时候会对得到的DataTable的数据进行筛选后绑定到Combobox.GridView.Repeat等控件中,现在分享一下两种DataTab ...

  6. LinQ系列文章

    温故而知新,想着系统再学习一次LinQ知识点,发现园子里有个非常棒的系列文章,所以Mark下来,方便以后查阅! 系列博客导航: LINQ之路系列博客导航 LINQ之路 1:LINQ介绍 LINQ之路 ...

  7. LINQ 系列

    C#图解教程 第十九章 LINQ   LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from…let…w ...

  8. linq之将IEnumerable<T>类型的集合转换为DataTable类型 (转载)

    在考虑将表格数据导出成excel的时候,网上搜的时候找到一个特别合适的公共方法,可以将query查询出来的集合转换为datatable 需引用using System.Reflection; publ ...

  9. DataTable Group By或运算 Linq Aggregate的使用

    class Program { static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add(&qu ...

随机推荐

  1. java+win7+eclipse+Maven+sikuli 配置总结---图形脚本语言

    简介:Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术.它与我们常用的自动化测试技术(工具)有很大的区别. 关于配置,一直是一个问题,下面做个总体介绍,用sikuli也有几个月 ...

  2. java string截取两个字符串之间的值

    java string截取两个字符串之间的值 import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...

  3. 【Spring】SpringMVC之基于注解的实现SpringMVC+MySQL

    目录结构: contents structure [-] SprinigMVC是什么 SpringMVC工作原理 @Controller和@RequestMapping注解 @Controller注解 ...

  4. Swift2.0语言教程之函数嵌套调用形式

    Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还能够调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其它函数:还 ...

  5. 第2章 Python基础-字符编码&数据类型 列表&元祖 练习题

    1.创建一个空列表,命名为names,往里面添加old_driver,rain,jack,shanshan,peiqi,black_girl元素 names = ["old_driver&q ...

  6. 颠覆Git 命令使用体验的神器 - tig

    颠覆 Git 命令使用体验的神器 -- tig     tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作, 如 git log, g ...

  7. There is no Action mapped for namespace / and action name . - [unknown location]

    今天碰到了这个问题,原因不明白. 在webContent下建立了index.jsp后重启项目不报错了. 原因未知.

  8. java学习记录--ThreadLocal使用案例

    本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal. 最近整理公司项目,发现不少写的比较糟糕的地方,比如下面这个: public class ...

  9. MySql(十八):MySql架构设计——高可用设计之 MySQL 监控

    前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出 ...

  10. svn提交遇到冲突解决方法

    冲突:如果提交时候发现冲突了先不急着提交,否则会产生冲突文件. 解决步骤: 1.将本地文件先复制一份 2.svn revert(恢复到没修改前版本) -> svn update(更新当前最新版本 ...