0

I have an SQL table with many columns(~200).

I want to create a LINQ query to obtain the sum of all rows by column. The result to be one row which represents the SUM of each column.

How can be done this LINQ query?

It's difficult to create a specific .Sum(...) for each column.

4

6 回答 6

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();
于 2013-09-05T12:18:17.177 回答
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;
        }
    }
}

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

于 2013-09-05T12:44:03.813 回答
2
double sum = Table.Select(t => t.Amount ?? 0).Sum();

或者

double sum = Table.Sum(t => t.Amount ?? 0);
于 2013-09-05T14:15:14.233 回答
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())
{
 ...
}

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

于 2013-09-07T16:12:18.920 回答
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());
于 2013-09-05T12:23:12.793 回答
-1

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

或者添加一个 sql 计算列。

于 2013-09-05T12:18:26.213 回答