至少有一个对象必须实现iccomparable.AsEnumerable()和Sum()



我尝试在tbl.AsEnumerable()上分组多列,我想将cus, salesman, ppj和curr分组,而amt_base应该是总和。

一切很好,但是当我使用grp.Sum(r => r.Field<decimal>("amt_base"))的总和显示至少一个对象必须实现IComparable。 foreach ()错误。

var results = from rows in tbl.AsEnumerable()
                              group rows by new
                              {
                                  cus = rows["cus"],
                                  salesman = rows["salesman"],
                                  ppj = rows["ppj"],
                                  curr = rows["curr"],
                              }into grp
                              orderby grp.Key
                              select new
                              {
                                  cus = grp.Key.cus,
                                  nm = grp.First()["nm"],
                                  salesman = grp.Key.salesman,
                                  ppj = grp.Key.ppj,
                                  curr = grp.Key.curr,
                                  amt_base = grp.Sum(r => r.Field<decimal>("amt_base")),
                              };
                DataTable tbl2 = new DataTable();
                tbl2.Columns.Add("cus");
                tbl2.Columns.Add("nm");
                tbl2.Columns.Add("salesman");
                tbl2.Columns.Add("ppj");
                tbl2.Columns.Add("curr");
                tbl2.Columns.Add("amt_base");
                decimal  tamt_base = 0;
                foreach (var item in results)
                {
                    DataRow dr2 = tbl2.NewRow();
                    dr2["cus"] = item.cus;
                    dr2["nm"] = item.nm;
                    dr2["salesman"] = item.salesman;
                    dr2["ppj"] = item.ppj;
                    dr2["curr"] = item.curr;
                    dr2["amt_base"] = Math.Round(item.amt_base, 2, MidpointRounding.AwayFromZero);
                    tbl2.Rows.Add(dr2);
                    tamt_base += item.amt_base;
                }

它不能根据由4个随机列组成的匿名类型确定如何排序行。它需要能够将每个实例与前一个进行比较,这通常是通过让您的类实现IComparable接口来完成的……但是你不能使用匿名类型。

删除:

orderby grp.Key

如果你真的需要某种排序,尝试使用单独的字段:

orderby grp.Key.cus

相关内容

  • 没有找到相关文章

最新更新