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

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操作
C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换的更多相关文章
- LINQ系列目录
1. LINQ准备 1.1 C#中与LINQ相关特性 2. LINQ to Object 2.1 LINQ to Object投影操作符(Select/SelectMany/Let) 2.2 LINQ ...
- Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解
返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...
- LINQ系列:LINQ to ADO.NET概述
LINQ to ADO.NET 包括两种独立的技术: LINQ to DataSet 和 LINQ to SQL. 使用 LINQ to DataSet 可以对DataSet 执行丰富而优化的查询,而 ...
- 白话LINQ系列1---什么是LINQ?
一.本系列目标 1.理解LINQ: 2.能写得复杂的LINQ语句(比如:动态查询): 3.理解表达式树及相关概念: 4.熟练运用LINQ写出优美的代码(希望一起努力,最终达到): 二.LINQ为何物? ...
- DataTable的筛选,过滤后绑定数据源的两种方法(DataTable的select和使用linq返回List集合)
一般数据处理使用DataTable的情况会很多,而我们很多时候会对得到的DataTable的数据进行筛选后绑定到Combobox.GridView.Repeat等控件中,现在分享一下两种DataTab ...
- LinQ系列文章
温故而知新,想着系统再学习一次LinQ知识点,发现园子里有个非常棒的系列文章,所以Mark下来,方便以后查阅! 系列博客导航: LINQ之路系列博客导航 LINQ之路 1:LINQ介绍 LINQ之路 ...
- LINQ 系列
C#图解教程 第十九章 LINQ LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from…let…w ...
- linq之将IEnumerable<T>类型的集合转换为DataTable类型 (转载)
在考虑将表格数据导出成excel的时候,网上搜的时候找到一个特别合适的公共方法,可以将query查询出来的集合转换为datatable 需引用using System.Reflection; publ ...
- DataTable Group By或运算 Linq Aggregate的使用
class Program { static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add(&qu ...
随机推荐
- java+win7+eclipse+Maven+sikuli 配置总结---图形脚本语言
简介:Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术.它与我们常用的自动化测试技术(工具)有很大的区别. 关于配置,一直是一个问题,下面做个总体介绍,用sikuli也有几个月 ...
- java string截取两个字符串之间的值
java string截取两个字符串之间的值 import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...
- 【Spring】SpringMVC之基于注解的实现SpringMVC+MySQL
目录结构: contents structure [-] SprinigMVC是什么 SpringMVC工作原理 @Controller和@RequestMapping注解 @Controller注解 ...
- Swift2.0语言教程之函数嵌套调用形式
Swift2.0语言教程之函数嵌套调用形式 Swift2.0语言函数嵌套调用形式 在Swift中,在函数中还能够调用函数,从而形成嵌套调用.嵌套调用的形式往往有两种:一种是在一个函数中调用其它函数:还 ...
- 第2章 Python基础-字符编码&数据类型 列表&元祖 练习题
1.创建一个空列表,命名为names,往里面添加old_driver,rain,jack,shanshan,peiqi,black_girl元素 names = ["old_driver&q ...
- 颠覆Git 命令使用体验的神器 - tig
颠覆 Git 命令使用体验的神器 -- tig tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作, 如 git log, g ...
- There is no Action mapped for namespace / and action name . - [unknown location]
今天碰到了这个问题,原因不明白. 在webContent下建立了index.jsp后重启项目不报错了. 原因未知.
- java学习记录--ThreadLocal使用案例
本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal. 最近整理公司项目,发现不少写的比较糟糕的地方,比如下面这个: public class ...
- MySql(十八):MySql架构设计——高可用设计之 MySQL 监控
前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出 ...
- svn提交遇到冲突解决方法
冲突:如果提交时候发现冲突了先不急着提交,否则会产生冲突文件. 解决步骤: 1.将本地文件先复制一份 2.svn revert(恢复到没修改前版本) -> svn update(更新当前最新版本 ...