LINQ中所有列的SUM

问题描述 投票:0回答:6

我有一个有很多列的SQL表(约200列)。

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

如何才能完成这个LINQ查询?

要创建一个特定的LINQ查询是很困难的。.Sum(...) 的每一列。

c# .net linq
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();

2
投票

使用正确的工具来完成任务。这次不是Entity Framework。这里有一个简单的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;
        }
    }
}

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


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

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

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());

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())
{
 ...
}

但现在这行不通,因为我没有任何属性。


-1
投票

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

或者增加一个sql计算列。

© www.soinside.com 2019 - 2024. All rights reserved.