DataSet中进行Join操作
2009-06-12 01:04
344 查看
该篇文章是我于2009年6月10日通过自己编写的工具,批量从位于在博客园的博客站点(http://chenxizhang.cnblogs.com)同步而来。文章中的图片地址仍然是链接到博客园的。特此说明!陈希章原文地址:http://www.cnblogs.com/chenxizhang/archive/2009/04/29/1445994.html原文标题:DataSet中进行Join操作 原文发表:2009/4/29 2:30:00 |
{
DataSet ds = PrepareDataSet();
gvCustomers.DataSource = ds.Tables[0];
gvOrders.DataSource = ds.Tables[1];
} ///
/// 这个方法准备10个客户,每个客户有5个订单
///
///
private DataSet PrepareDataSet()
{
DataSet ds = new DataSet();
DataTable tb1 = new DataTable("Customers");
tb1.Columns.AddRange(new[]
{
new DataColumn("CustomerID")
,new DataColumn("CompanyName")
}); DataTable tb2 = new DataTable("Orders");
tb2.Columns.AddRange(new[]
{
new DataColumn("CustomerID")
,new DataColumn("OrderID",typeof(int))
,new DataColumn("OrderDate",typeof(DateTime))
}); ds.Tables.AddRange(new[] { tb1, tb2 });
//添加关系
ds.Relations.Add("Customers_Orders_Relation", tb1.Columns["CustomerID"], tb2.Columns["CustomerID"]); for (int x = 0; x < 10; x++)
{
DataRow customer = tb1.NewRow();
customer[0] = "CustomerID:" + x.ToString();
customer[1] = "Company:" + x.ToString();
tb1.Rows.Add(customer);
for (int y = 0; y < 5; y++)
{
DataRow order = tb2.NewRow();
order[0] = "CustomerID:" + x.ToString();
order[1] = (y + 1) * 1000;
order[2] = DateTime.Now;
tb2.Rows.Add(order);
}
} return ds; }
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/DataSetJoin_93B9/image_thumb.png)
首先第一种做法我们称为传统的做法
微软知识库里面有个DataSetHelper ,可以对DataSet中的DataTable进行Distinct、Group by、Join和Create。请参考下面的链接/content/3972998.html
代码很多,这里就不重复粘贴了
我们重点来看一下,如何实现两个表的Join,得到一个新的结果集呢
private void btJoin_Click(object sender, EventArgs e)
{
Common.DataSetHelper helper = new Common.DataSetHelper(ref ds); DataTable tb = helper.SelectJoinInto("temp", ds.Tables["Orders"], "CustomerID,OrderID,OrderDate,Customers_Orders_Relation.CompanyName", null, "OrderID"); gvJoinResult.DataSource = tb;
} 这里需要注意一下,第一个参数是新的表格名称,不能与现有表重复。第二个参数是要做为子表的DataTable,一般就是放在Leftjoin左边的那个表。
第三个参数是字段列表,有意思的是,如果要引用其他表的字段,则需要用Customers_Orders_Relation.CompanyName这样的格式,即指定关系名称,再加上字段名称。
第四个参数是要不要筛选。第五个字段是怎么排序
关于这一个功能,微软已经在.NET 3.5中将其集成到了LINQ.官方称其为LINQ TO DataSet,下面我们大致来看一下
1. 首先要添加有关的引用
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/DataSetJoin_93B9/image_thumb_1.png)
2. 编写代码
DataSet ds = PrepareDataSet(); DataTable orders = ds.Tables["Orders"];
DataTable customers = ds.Tables["Customers"]; var query =
from order in orders.AsEnumerable()
join customer in customers.AsEnumerable()
on order.Field("CustomerID") equals
customer.Field("CustomerID")
select new
{
CustomerID =
order.Field("CustomerID"),
CompanyName =
customer.Field("CompanyName"),
OrderDate =
order.Field("OrderDate"),
OrderID =
order.Field("OrderID")
}; gvJoinResult.DataSource =query.ToList();
![](http://images.cnblogs.com/cnblogs_com/chenxizhang/WindowsLiveWriter/DataSetJoin_93B9/image_thumb_2.png)
具体在LINQ TO DataSet中进行连接查询的信息,请参考下面的链接
http://msdn.microsoft.com/zh-cn/library/bb386969.aspx
作者:陈希章 出处:http://blog.csdn.net/chen_xizhang 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
相关文章推荐
- DataSet中进行Join操作
- DataSetHelper 操作dataset 辅助类(2) DataTable中进行Distinct、Group by、Join、Create
- 使用Hadoop的datajoin包进行关系型join操作【hadoop关系型join,源码解析及如何应用jar包中的抽象类】
- C#对XML的操作,利用DataSet对XML进行操作。
- Spark的Dataset操作(五)-多表操作 join
- Python进行数据的多表Join关联操作
- 对spark dataframe join之后的列值NULL值进行填充为指定数值的操作
- 使用hadoop的datajoin包进行关系型join操作
- DataSetHelper ,可以对DataSet中的DataTable进行Distinct、Group by、Join和Create。
- C#对XML的操作,利用DataSet对XML进行操作。
- odps(hive)上进行join操作的三种方式
- MySQL 使用locate函数对 GROUP_CONCAT 列进行 JOIN 操作
- DataSet进行序列化和反序列化操作
- 使用DataSet对数据库进行增、删、改操作
- 最简单DataSet导出EXCEL并进行格式控制等操作
- 在MySQL中使用JOIN语句进行连接操作的详细教程
- 在MySQL中使用JOIN语句进行连接操作的详细教程
- Python进行数据的Join关联操作及从分表取数据一例
- 使用common-configuration进行对配置文件的操作(xml,properties)
- 已经采用了云计算的单台服务器上,是否也要安装操作系统?是否仍能对单机进行操作?