首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# Linq对DataTable分组求和解决思路

2013-07-09 
C# Linq对DataTable分组求和以下是代码:DataTable myDT new DataTable()myDT.Columns.Add(new DataColu

C# Linq对DataTable分组求和
以下是代码:
  DataTable myDT = new DataTable();
            myDT.Columns.Add(new DataColumn("PM", typeof(string)));     //单据编号
            myDT.Columns.Add(new DataColumn("BH", typeof(string)));     //编号
            myDT.Columns.Add(new DataColumn("DH", typeof(string)));     //工单号
            myDT.Columns.Add(new DataColumn("SL",typeof(decimal)));     //数量
            DataRow myRow = myDT.NewRow();
            myRow["PM"] = "M012013070001";
            myRow["BH"] = "0001";
            myRow["DH"] = "130701001";
            myRow["SL"] = 100;
            myDT.Rows.Add(myRow);
            myRow = myDT.NewRow();
            myRow["PM"] = "M012013070001";
            myRow["BH"] = "0002";
            myRow["DH"] = "130701001";
            myRow["SL"] = 120;
            myDT.Rows.Add(myRow);
            myRow = myDT.NewRow();
            myRow["PM"] = "M012013070001";
            myRow["BH"] = "0003";
            myRow["DH"] = "130701002";
            myRow["SL"] = 120;
            myDT.Rows.Add(myRow);
            myRow = myDT.NewRow();
            myRow["PM"] = "M012013070001";
            myRow["BH"] = "0004";


            myRow["DH"] = "130701002";
            myRow["SL"] = 200;
            myDT.Rows.Add(myRow);
     var myTable = from t in myDT.AsEnumerable()
                          group t by new { myDH = t.Field<string>("DH") } into x
                          select new
                          {
                              x.Key.myDH,
                              y = x.Sum(k => k.Field<decimal>("SL"))
                          };
            foreach (var s in myTable)
            {
                MessageBox.Show(s.myDH.ToString() + ':' + s.y.ToString());
            }
对单号进行分组,对数量求和,要达到下面这种样式:
单据编号                                          工单号          数量
M0120130700010001,M0120130700010002     130701001      220
M0120130700010003,M0120130700010004     130701002      320 C# LINQ


[解决办法]


参考http://bbs.csdn.net/topics/380267995
[解决办法]
select new {
    单据编号 = string.Join(",", x.Select(y => y.Field<string>("PM")),
    工单号 = x.Key,
    数量 = x.Select(y => y.Field<decimal>("SL").Sum()
}

热点排行