使用LINQ计算每一行的总和

时间:2014-01-02 12:19:31

标签: c# linq

我有一个以下列的数据表

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。

6 个答案:

答案 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现在看起来像:

enter image description here

这样,您就可以自动更新DataTableColSum列。

答案 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);
        }