LINQ中所有列的SUM

时间:2013-09-05 12:14:36

标签: c# .net linq

我有一个包含许多列的SQL表(~200)。

我想创建一个LINQ查询,以按列获取所有行的总和。结果是一行代表每列的SUM。

如何完成此LINQ查询?

很难为每列创建特定的.Sum(...)

6 个答案:

答案 0 :(得分:2)

您可以尝试使用:

var results = (from i in yourCollection
               group g by i.Column into g
               select new
               {
                   ColumnName = i.Column,
                   ColumnTotal = i.Sum(x => x.Value) 
               }).ToList();

答案 1 :(得分:2)

使用正确的工具完成工作。这次它不是实体框架。这是一个简单的ADO.NET例程:

public double[] SumAllColumns(IDbConnection connection)
{
    using (var cmd = connection.CreateCommand())
    {
        cmd.CommandText = "SELECT * FROM YourTable";
        using (var reader = cmd.ExecuteReader())
        {
            var values = new double[reader.FieldCount];
            while (reader.Read())
            {
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    values[i] += reader.GetDouble(i);
                }
            }

            return values;
        }
    }
}

该方法返回一个数组,其中包含每列的总和。

答案 2 :(得分:1)

double sum = Table.Select(t => t.Amount ?? 0).Sum();

OR

double sum = Table.Sum(t => t.Amount ?? 0).Sum();

答案 3 :(得分:0)

var sums = (from c in columns
    group c by c.columnName into g
    select new
    {
        SumCol1 = g.Sum(x => x.Col1), 
        SumCol2 = g.Sum(x => x.Col2) 
    }).SingleOrDefault;

要访问控制台应用程序中的变量,例如......

Console.Write(sums.SumCol1.ToString() + " : " + sums.SumCol2.ToString());

答案 4 :(得分:0)

我使用过这个解决方案:

from res in datacTx.Table
        where ...
        group re by re.id into g
        select new
        {
         col1 = g.Sum(x => x.col1),
         col2 = g.Sum(x => x.col2),
         ...
        };

但我现在无法访问任何值,或者我无法将结果转换为列表,其中每列代表列表中的条目。

到目前为止,我已经用它来访问linq查询的值:

foreach (var propertyInfo in res.GetType().GetProperties())
{
 ...
}

但现在这不起作用,因为我没有任何属性。

答案 5 :(得分:-1)

您可以使用sqlcommand,该执行为结果数组的每一行返回,然后使用array.Sum()。

或者添加一个sql计算列。