我有一个包含许多列的SQL表(~200)。
我想创建一个LINQ查询,以按列获取所有行的总和。结果是一行代表每列的SUM。
如何完成此LINQ查询?
很难为每列创建特定的.Sum(...)
。
答案 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计算列。