C# 将数据表中的列相乘

C# 将数据表中的列相乘,c#,datatable,C#,Datatable,我在C#中有一个数据表,有一个“价格”列和一个“分配”列,我需要将价格列乘以分配列,并将结果放入价格列。有没有办法不在桌子上绕圈子?我试过这样的方法: DataTable dt = getData(); dt.Columns["Price"].Expression = "Allocation * Price"; 但很明显,这给了我以下例外: Cannot set Expression property due to circular reference in the expression.

我在C#中有一个数据表,有一个“价格”列和一个“分配”列,我需要将价格列乘以分配列,并将结果放入价格列。有没有办法不在桌子上绕圈子?我试过这样的方法:

DataTable dt = getData();
dt.Columns["Price"].Expression = "Allocation * Price";
但很明显,这给了我以下例外:

Cannot set Expression property due to circular reference in the expression.

有人知道实现这一点的其他方法吗?事先谢谢。

您可以使用LINQ表达式在一行中完成:

dt.Rows.ForEach(x => x["Price"] = (double)x["Price"] * (double)x["Allocation"]);

您可以只向DataTable添加另一列:

dt.Columns.Add("TotalPrice", typeof(decimal));
dt["TotalPrice"] = "Allocation * Price";

添加一个新列,该列的值根据其他两个列计算:

dt.Columns.Add("TotalPrice", typeof(decimal), "Allocation * Price");

使用这种方法,如果您更改
价格
分配

,则
总价
将始终是最新的。如果您没有单独的列,当某件事情使计算再次执行时会发生什么

在某种程度上,您必须添加bend datatable来完成所需的代码量(不引入大量潜在的“erm”功能)将比仅仅敲打一个类来保存这些内容更费劲


从datatable读取从datatable写入并不困难,绑定到内容列表也不困难。

在表行上循环有什么问题?可能有很多,我正在从总账数据库中提取;)您是否仍在使用datatable结构?为什么没有列Price、Allocation、Total?@SuperTron但即使你可以设置一个表达式,也必须在某个地方遍历每一行并计算这些值。@BWC好吧,这样做是可能的,但实际上有几列我需要根据不同的情况进行乘法,所以“Total”是可能并不总是能说明我需要什么。我不希望有“DebitTotal”、“CreditTotal”等栏目(尽管如果其他都失败了,我会求助于这些栏目)。4对一种不可编译的方法投赞成票?
数据行集合
不是
列表
。但是请不要使用
dt.Rows.Cast().ToList().ForEach
。最简单和最有效的方法是使用普通的
foreach
循环。这也应该可以工作…出于某种原因,我在对行执行foreach时出错。dt.AsEnumerable().ForEach(x=>x[“价格”]=(双精度)x[“价格”]*(双精度)x[“分配”];