C# 两个datatable 关联更新

Dear SQL(燊) 2021-04-28 09:38:46
大神们,需将dt中按column1列 group by 汇总 val1列,再将汇总的值更新到 dat 中对应的val1列中

DataTable dt = new DataTable();
DataTable dat = new DataTable();

DataColumn dc = new DataColumn("column1", typeof(string));
dt.Columns.Add(dc);

DataColumn dc3 = new DataColumn("val1", typeof(int));
dt.Columns.Add(dc3);

dt.Rows.Add("张三", 10);
dt.Rows.Add("张三", 10);
dt.Rows.Add("张三", 100);
dt.Rows.Add("张三", 100);
dt.Rows.Add("张三", 100);
dt.Rows.Add("张三", 100);
dt.Rows.Add("张三fewfwwwwwwwwwwwwwww", 100);
dt.Rows.Add("张三fewfwfwfwfw", 100);
dt.Rows.Add("王五", 100);
dt.Rows.Add("王五", 100);



DataColumn dct = new DataColumn("column1", typeof(string));
dat.Columns.Add(dct);

DataColumn dc3t = new DataColumn("val1", typeof(int));
dat.Columns.Add(dc3t);

dt.Rows.Add("张三", 0);
dt.Rows.Add("王五", 0);
dt.Rows.Add("张三fewfwwwwwwwwwwwwwww", 0);
dt.Rows.Add("张三fewfwfwfwfw", 0);


var query = from t in dt.AsEnumerable()
group t by new { t1 = t.Field<string>("column1") } into m
select new
{
column1 = m.Key.t1,
score = m.Sum(n => n.Field<int>("val1"))
};
...全文
702 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫魂一号 2021-04-28
  • 打赏
  • 举报
回复
Linq语法。。 dt.AsEnumerable().Where(w => w.RowState != DataRowState.Deleted).Sum(t => t.Field<decimal?>("字段名"))
Dear SQL(燊) 2021-04-28
  • 打赏
  • 举报
回复
用datatable少了,现在都用的是啥,我用了大量的datatable
wanghui0380 2021-04-28
  • 打赏
  • 举报
回复
主从表计算这种事情,datatable,dataset本身就可以做,只是现在用datatable的人少,所以这种传统代码面临失传(嘿嘿,要不要申请非遗啊)
 DataTable dt = new DataTable();
            DataTable dat = new DataTable();

            DataColumn dc = new DataColumn("column1", typeof(string));
            dt.Columns.Add(dc);

            DataColumn dc3 = new DataColumn("val1", typeof(int));
            dt.Columns.Add(dc3);
           
            dt.Rows.Add("张三", 10);
            dt.Rows.Add("张三", 10);
            dt.Rows.Add("张三", 100);
            dt.Rows.Add("张三", 100);
            dt.Rows.Add("张三", 100);
            dt.Rows.Add("张三", 100);
            dt.Rows.Add("张三fewfwwwwwwwwwwwwwww", 100);
            dt.Rows.Add("张三fewfwfwfwfw", 100);
            dt.Rows.Add("王五", 100);
            dt.Rows.Add("王五", 100);



            DataColumn dct = new DataColumn("column1", typeof(string));
            dat.Columns.Add(dct);

       
           
            dat.PrimaryKey=new DataColumn[]{dct};
            dat.Rows.Add("张三");
            dat.Rows.Add("王五");
            dat.Rows.Add("张三fewfwwwwwwwwwwwwwww");
            dat.Rows.Add("张三fewfwfwfwfw");

            

            DataSet ds = new DataSet();
            ds.Tables.Add(dt);
            ds.Tables.Add(dat);
//直接建立主从关系
            ds.Relations.Add(dct,
                dc);
   //给dat新增一个列,设置表达式让他根据表达式,直接汇总字段
            dat.Columns.Add("val1", typeof(int), "Sum(Child.val1)");
运行后结果:
Dear SQL(燊) 2021-04-28
  • 打赏
  • 举报
回复
引用 1 楼 nzhwf01 的回复:
干嘛说这么复杂,不就是给 第二个table赋值的事吗? 新datatable dttotal 旧datatable dtdetail for(datarow drtotal in dttotal) { for(datarow drmx in dtdetail) { if(drtotal["名称"].tostring()==drmx["名称"].tostring()) { drtotal["值"]=convert.toint32(drmx["值"].) } } }
可以用LINQ实现吗,记录比较多
nzhwf01 2021-04-28
  • 打赏
  • 举报
回复
drtotal["值"]+=convert.toint32(drmx["值"].)
nzhwf01 2021-04-28
  • 打赏
  • 举报
回复
干嘛说这么复杂,不就是给 第二个table赋值的事吗? 新datatable dttotal 旧datatable dtdetail for(datarow drtotal in dttotal) { for(datarow drmx in dtdetail) { if(drtotal["名称"].tostring()==drmx["名称"].tostring()) { drtotal["值"]=convert.toint32(drmx["值"].) } } }
紫魂一号 2021-04-28
  • 打赏
  • 举报
回复
引用 7 楼 Dear SQL(燊) 的回复:
[quote=引用 6 楼 紫魂一号 的回复:]Linq语法。。 dt.AsEnumerable().Where(w => w.RowState != DataRowState.Deleted).Sum(t => t.Field<decimal?>("字段名"))
需要更新到dat中val1列[/quote] List<DataRow> rows = query.ToList<DataRow>();
Dear SQL(燊) 2021-04-28
  • 打赏
  • 举报
回复
引用 6 楼 紫魂一号 的回复:
Linq语法。。 dt.AsEnumerable().Where(w => w.RowState != DataRowState.Deleted).Sum(t => t.Field<decimal?>("字段名"))
需要更新到dat中val1列

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧