本帖最后由 caozhy 于 2013-12-10 18:14:07 编辑

解决方案 »

  1.   

    什么意思?添加另外一个Datatable里面有的CostName,而另外一个没有的吗?
      

  2.   

    就是让 两个 dt里的值 匹配 
    是不是比如DT1 CostName列里面没有"语录" 新增一行,CostType 的值为0
    DT2同理。。猜猜猜。
      

  3.   

    就是让 两个 dt里的值 匹配 
    是不是比如DT1 CostName列里面没有"语录" 新增一行,CostType 的值为0
    DT2同理。。猜猜猜。
    对 就是 要 保证 这两个 dt 里的值 是一样的
      

  4.   

    就是让 两个 dt里的值 匹配 
    是不是比如DT1 CostName列里面没有"语录" 新增一行,CostType 的值为0
    DT2同理。。猜猜猜。
    对 就是 要 保证 这两个 dt 里的值 是一样的最简单不就是判断2个相差什么吗?新增一行,设置值就可以了。。
    你想表达什么?
      

  5.   

    用LINQ。业务逻辑看不懂你说的。。
      

  6.   


    create proc proc_DTTest
    as
    declare @Dt1CostName nvarchar(100),@Dt2CostName nvarchar(100),@i int
    set @i = 100
    while(@i < 0)
    begin
    --得到Dt1 的 CostName
    select top 1 @Dt1CostName = CostName from Dt1 while Dt1ID not in
    (
    select top (1*(@i - 1) Dt1ID from Dt1)
    )
    --得到Dt2 的 CostName
    select top 1 @Dt2CostName = CostName from Dt2 while Dt2ID not in
    (
    select top (1*(@i - 1) Dt1ID from Dt2)
    )
    if(@Dt1CostName = @Dt2CostName)
    begin
    --这里做你想要做的事儿
    print '这里做你想要做的事儿'
    end
    else
    begin
    --这里做你想要做的事儿
    print '这里做你想要做的事儿'
    end
    set @i = @i - 1
    end
    我按照我的意思写的端存储过程,不知道是不是你想要的答案。手写的,可能有错。
      

  7.   

    我不太 熟悉 linq  能 给点代码吗?
    你只看 我给出 的 数据 就 行了 应该 能看懂
      

  8.   

    楼主的意思应该是 dt两张表里面的CostName做到一致性,而且要全。
    是用啥代码去实现? SQL还是C#?
    写下C#伪代码:dt newdt2,newdt1
     foreach(var item in dt1)
    {
    if(!dt2.find(l=>l.CostName ==item.CostName ))
    {
    newdt2.add(item);
    }
    }
    同理处理newdt1
    然后 
    dt1.union(newdt1);//合并新增的
    dt2.union(newdt2);//合并新增的
    }
      

  9.   

    newdt2.add(new{ item.CostName ,0});
      

  10.   

    linq
    先得到这俩个表customname的差值,intersect方法。
    然后分别插入到表a和表b中。
      

  11.   

    现在附上标准代码:    public static void dodt()
            {
                DataTable dt=new System.Data.DataTable();
                dt.Columns.Add("CostName");
                dt.Columns.Add("CostType");
                DataTable dt1 = dt.Clone();
                DataTable dt2 = dt.Clone();
                DataTable newdt2 = dt.Clone();
                DataTable newdt1 = dt.Clone();
                dt1.Rows.Add("打单费", 0);
                dt1.Rows.Add("语录", 0);
                dt1.Rows.Add("港杂", 0);
                dt2.Rows.Add("语录", 1);
                dt2.Rows.Add("商检", 1);
                ///处理在dt1里面存在 dt2里面不存在的
                foreach (DataRow item in dt1.Rows)
                {                var query = dt2.AsEnumerable().Where(A => A.Field<string>("CostName").Equals(item[0].ToString())); //linq to data 查询CostName是不是已经存在
                    if (query.Count() <1)
                    {
                        newdt2.Rows.Add(item[0].ToString(), 0);
                    }            }
                ///处理在dt2里面存在 dt1里面不存在的
                foreach (DataRow item in dt2.Rows)
                {                var query = dt1.AsEnumerable().Where(A => A.Field<string>("CostName").Equals(item[0].ToString()));
                    if (query.Count() < 1)
                    {
                        newdt1.Rows.Add(item[0].ToString(), 0);
                    }            }
                dt1.Merge(newdt1);
                dt2.Merge(newdt2);
                Console.ReadLine();
            }
      

  12.   

    查询是这样的: 刚才发的竟然看不到
      var query = dt1.AsEnumerable().Where(A => A.Field<string>("CostName").Equals(item[0].ToString()));
      

  13.   

    问题已经解决 感谢 各位 的回答 其实 思路 昨晚 就想好了 只不过 天 太冷 没加班 思路 跟 F14 说的擦不多 不过 我们在 用不了 linq  我昨晚 的思路 是 从  得到的 
    感谢 各位