我有一个以下列的数据表
Price1 Price2 Price3 Price4 ColSum
------ ------ ------ ------ ------
2.5 4.7 8 99
10 39 88.3 90
99 21 33 3.2
现在,如何使用LINQ计算每一行的总和?
我想实现
ColSum = sum(Price1+Price2+Price3+Price4)
每个列由linq。
答案 0 :(得分:4)
你根本不需要Linq;只需使用Expression
property:
获取或设置用于过滤行,计算列中的值或创建聚合列的表达式。
示例:强>
var dt = new DataTable();
dt.Columns.Add("Price1", typeof(decimal));
dt.Columns.Add("Price2", typeof(decimal));
dt.Columns.Add("Price3", typeof(decimal));
dt.Columns.Add("Price4", typeof(decimal));
dt.Columns.Add("ColSum", typeof(decimal));
dt.Rows.Add(new object[]{2.5, 4.6, 8, 99});
dt.Rows.Add(new object[]{10, 39, 88.3, 90});
dt.Rows.Add(new object[]{99, 21, 33, 3.2});
dt.Columns["ColSum"].Expression = "Price1+Price2+Price3+Price4";
dt
现在看起来像:
这样,您就可以自动更新DataTable
和ColSum
列。
答案 1 :(得分:2)
您只想要计算成员中每行的总和吗?
var result = myTable.AsEnumerable().Select(r =>
new {
Price1 = r.Price1,
Price2 = r.Price2,
Price3 = r.Price3,
Price4 = r.Price4,
ColSum = r.Price1 + r.Price2 + r.Price3 + r.Price4
});
答案 2 :(得分:1)
var sums = Prices.Select(i => new { ColSum= i.Price1 + i.Price2 + i.Price3 + i.Price4 });
foreach (var sum in sums)
{
Console.WriteLine(sum.ColSum.ToString());
}
答案 3 :(得分:1)
var sum = objectList.Select(i => new
{
Sum = i.Price1 + i.Price2+i.Price3+i.Price4
});
使用数据表
var result = from p in dt.AsEnumerable()
select new
{
Sum = p.Field<double>("Price1") + p.Field<double>("Price2") + p.Field<double>("Price3") + p.Field<double>("Price4")
};
答案 4 :(得分:1)
试试这个
var result = from p in priceList
select new
{
Price1 = p.Price1,
Price2 = p.Price2,
Price3 = p.Price3,
Price4 = p.Price4,
ColSum = p.Price1 + p.Price2 + p.Price3 + p.Price4 + p.Price5
};
答案 5 :(得分:0)
您应该遍历每行的列集合:
int sum;
foreach (DataRow row in dt.Rows)
{
sum = dt.Columns.Cast<DataColumn>().Sum(column => Convert.ToInt32(row[column]));
MessageBox.Show("Sum for current row: " + sum);
}