LINQ To DataSet 示例
如果在项目遇到这样的问题如:DataTable1和DataTable2需要根据一定的规则进行合并成一个DataTable3。
问题1:DataTable1不是读数据库表的结果,而是合成的数据集,因此无法用SQL语句组合查询。
问题2:DataTable1与DataTable2本身就是非常繁琐的查询且结果集非常大,这样如果DataTable1再与DataTable2
组合查询则很容易发生SQL执行超时。
遇到以上问题,第一个想法就是把两个DataTable,取出放至内存中用嵌套遍历的方式重组得到DataTable3.
.net推出LINQ后就可以用这种更简洁易懂的类SQL语法的LINQ To DataTable 来解决以上问题。下面我例出几个示例分享。
using System.Linq;
using System.Text;
using System.Data;
1.基本方法:
DataSet ds = new DataSet();
adapter.Fill(ds, "Customers");//读数据库略
var result = from s1 in ds.Tables["Customers"].AsEnumerable()
where s1.Field<string>("Region") == "SP" //转换成string后进行对比,如果为DBNull 则传回空字符串
select s1;
foreach (var item in result)
Console.WriteLine(item["CustomerID"]);
Console.ReadLine();
2.指定DataRowVersion:
var result = from s1 in ds.Tables["Customers"].AsEnumerable()
where !s1.IsNull("Region") && (string)s1["Region"] == "SP"
select s1;
3. Join组合查询:
var result = from s1 in ds.Tables["Customers"].AsEnumerable()
join s2 in ds.Tables["Orders"].AsEnumerable() on
s1.Field<string>("CustomerID") equals s2.Field<string>("CustomerID")
where s2.Field<DateTime>("OrderDate") > DateTime.Parse("1997/1/1") &&
s2.Field<DateTime>("OrderDate") < DateTime.Parse("1997/5/31")
select new
{
OrderID = s2.Field<int>("OrderID"),
CustomerName = s1.Field<string>("CompanyName"),
OrderDate = s2.Field<DateTime>("OrderDate")
};
4.Group
var result = from s in ds.Tables["Orders"].AsEnumerable()
group s by s.Field<string>("CustomerID") into g
select new
{
OrderID = g.First().Field<int>("OrderID"),
CustomerID = g.Key
};
5.返回前10行数据
var table = (from s1 in ds.Tables["Customers"].AsEnumerable() select s1).Take(10);
LINQ To DataSet 示例的更多相关文章
- LINQ(LINQ to DataSet)
http://www.cnblogs.com/SkySoot/archive/2012/08/21/2649471.html DataTable.Select()方法使用和 SQL 相似的过滤语法从 ...
- 泛型 Field 和 SetField 方法 (LINQ to DataSet)
LINQ to DataSet 为 DataRow 类提供用于访问列值的扩展方法:Field 方法和 SetField 方法.这些方法使开发人员能够更轻松地访问列值,特别是 null 值.DataSe ...
- LINQ系列:LINQ to DataSet的DataTable操作
LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...
- C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换
LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...
- Linq to DataSet 和 DataSet使用方法学习
简单入门: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy ...
- LINQ to DataSet,对离线数据的Linq支持、AsEnumeable()
一.DataTable的扩展方法: 1.DataTable转Linq:AsEnumerable 方法 返回IEnumerable<T>对象,其中泛型参数T是DataRow. 此对象可用在 ...
- LINQ系列:LINQ to DataSet的DataView操作
1. 创建DataView EnumerableRowCollection<DataRow> expr = from p in products.AsEnumerable() orderb ...
- Linq To DataSet
private static void LinqToDataSet() { string sql = "select * from Advertising"; using (Dat ...
- LINQ to DataSet的DataTable操作
1. DataTable读取列表 DataSet ds = new DataSet();// 省略ds的Fill代码DataTable products = ds.Tables["Produ ...
随机推荐
- Python自动化之socket初识
1. os.popen() os.system(cmd)会直接输出命令的结果到屏幕上,返回一个状态码0或1. os.popen(cmd)会返回一个<open file 'dir', mode ' ...
- HttpGet
private static void func_httpGet(String url) { HttpClient httpClient = new HttpClient(); try { GetMe ...
- MorkDown 常用语法总结
推荐一款很好用的markdown编辑器:http://www.typora.io/ 基本技巧: 代码高亮 如果你只想高亮语句中的某个函数名或关键字,可以使用``实现 通常编辑器根据diamagneti ...
- python suds 一坑
当被调用服务的返回xml内容值不是按照wsdl文件描述定义的, 就莫名奇妙返回suds.WebFault 没有更多详细信息! 于是将源码解压,并插入到sys.path[0], 通过设置断点的方式找出非 ...
- 'ModelOptions' object has no attribute 'get_field_names
peewee安装时随意了点.装了2.8.0的. 倒回到2.6.0就好了. sudo pip uninstall peewee sudo pip install peewee==2.6.0
- ZJOIDay2T1 BB题解
讲道理我是调不出来了... 考虑对序列按下标维护每个节点最后的树. 那么 改操作点 - 把一段连续的节点改父亲 加点/删点(注意拆成两个操作了) 插儿子 那么用seg维护一下下标, 用ETT维护Dep ...
- 更换CentOS7的下载源为阿里云
安装epel rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/7/x86_64/e/epel-release-7-7.noarch.rpm 1.备份 m ...
- 注册页面的js验证
简单的用户注册页面:(html) 包含用户名格式验证.邮箱格式验证.确认密码一致性验证和必填项验证.(纯javascript) <center> <h1>用户注册</h1 ...
- CDN——到底用还是不用?
最近在学bootstrap,在知乎上搜索bootstrap看到有人问bootstrap基础包体积较大,对性能影响会不会很大,看到两种方法来减少对性能的影响: 有选择地部分加载,bootstrap带有L ...
- Java 多线程Socket编程通讯--实现聊天室代码
1.创建服务器类 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import ja ...