至少一个对象必须实现 IComparable。 AsEnumerable() 和 Sum()
At least one object must implement IComparable. AsEnumerable() and Sum()
我尝试在 tbl.AsEnumerable()
上对多个列进行分组,
我想将 cus、salesman、ppj 和 curr 分组,而 amt_base 应该是总和。
一切都很好,
但是当我在 amt 的总和上使用 grp.Sum(r => r.Field<decimal>("amt_base"))
时,它显示 At least one object must implement 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 个随机列组成的匿名类型对行进行排序。它需要能够将每个实例与之前的实例进行比较,这通常是通过让您的 class 实现 IComparable
接口来完成的……但是您不能使用匿名类型。
删除这个:
orderby grp.Key
如果您确实需要某种排序,请尝试使用单独的字段:
orderby grp.Key.cus
我尝试在 tbl.AsEnumerable()
上对多个列进行分组,
我想将 cus、salesman、ppj 和 curr 分组,而 amt_base 应该是总和。
一切都很好,
但是当我在 amt 的总和上使用 grp.Sum(r => r.Field<decimal>("amt_base"))
时,它显示 At least one object must implement 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 个随机列组成的匿名类型对行进行排序。它需要能够将每个实例与之前的实例进行比较,这通常是通过让您的 class 实现 IComparable
接口来完成的……但是您不能使用匿名类型。
删除这个:
orderby grp.Key
如果您确实需要某种排序,请尝试使用单独的字段:
orderby grp.Key.cus