C# Linq: Join两个DataTable

6 篇文章 0 订阅
1 篇文章 0 订阅

方案一:当能够确定DtAll表的字段,并且字段不是很多的情况下,可以显式写出:

var query1 =
     from rHead in dtHead.AsEnumerable()
     from rTail in dtTail.AsEnumerable()
     where rHead.Field<Int32>('GoodID') == rTail.Field<Int32>('GoodID')
     select new 
     {
         GoodID = rHead.Field<Int32>('GoodID'),
         GoodName = rHead.Field<String>('GoodName'),
         Num = rTail.Field<Int32>('Num'),
         Money = rTail.Field<Int32>('Money')
     };

 DataTable dtNew = DtAll.Copy();
 foreach (var obj in query1)
 {
     dtNew.Rows.Add(obj.GoodID, obj.GoodName, obj.Num, obj.Money);
 }


其中DtAll的表结构已经事先创建好了,在下面会给出所有代码。


方案二:LINQ提供了与SQL中类似的JOIN方法。并且当字段很多的情况下,每一个字段都在select new中写出来比较麻烦,可以使用如下的方式:


var query =
    from rHead in dtHead.AsEnumerable()
    join rTail in dtTail.AsEnumerable()
    on rHead.Field<Int32>('GoodID') equals rTail.Field<Int32>('GoodID')
    select rHead.ItemArray.Concat(rTail.ItemArray.Skip(1));

foreach (var obj in query)
{
    DataRow dr = DtAll.NewRow();
    dr.ItemArray = obj.ToArray();
    DtAll.Rows.Add(dr);
}

使用Concat将表1和表2的字段拼接起来,作为总表DtAll的字段,但由于表1、表2中都存在字段GoodID,不能在表中出现重复的字段,因此使用Skip(1)跳过表2中的第一个字段GoodID。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值