我有一個包含許多列(〜200)的SQL表。LINQ中所有列的SUM
我想創建一個LINQ查詢來獲得所有行按列的總和。結果是表示每列的總和的一行。
該如何做這個LINQ查詢?
很難爲每列創建具體的.Sum(...)
。
我有一個包含許多列(〜200)的SQL表。LINQ中所有列的SUM
我想創建一個LINQ查詢來獲得所有行按列的總和。結果是表示每列的總和的一行。
該如何做這個LINQ查詢?
很難爲每列創建具體的.Sum(...)
。
你可以嘗試使用:
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();
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());
使用正確的工具的工作。這一次它不是實體框架。這是一個簡單的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;
}
}
}
該方法返回一個數組,其中包含每列的總和。
double sum = Table.Select(t => t.Amount ?? 0).Sum();
OR
double sum = Table.Sum(t => t.Amount ?? 0).Sum();
我用這個解決方案:
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())
{
...
}
,但現在這是行不通的,因爲我沒有任何屬性。
_「我有一個有很多列的SQL表(〜200)」_這就是問題所在。 [Normalize](http://en.wikipedia.org/wiki/Database_normalization)你的表。 –
我不行。這是一個正在生產的舊系統。我需要以舊數據庫格式構建應用程序。 – dpv