zoukankan      html  css  js  c++  java
  • C#LinqJoin两个DataTable

    C# Linq: Join两个DataTable

    2015年06月15日 22:37:18 baidu_20993761 阅读数 4437

    方案一:当能够确定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。

  • 相关阅读:
    javaweb学习总结(二十九)——EL表达式
    javaweb学习总结(二十)——JavaBean总结
    Js_闭包详解
    JDBC各种数据库连接URL关键代码
    Jquery Table 的基本操作
    浅谈HTTP中Get与Post的区别
    hibernate一级缓存和二级缓存的区别
    SQL删除重复数据只保留一条
    数据库事务的隔离级别
    完全卸载oracle11g
  • 原文地址:https://www.cnblogs.com/grj001/p/12225087.html
Copyright © 2011-2022 走看看