多くの列(〜200)を持つSQLテーブルがあります。
すべての行の合計を列ごとに取得する LINQ クエリを作成したいと考えています。結果は、各列の合計を表す 1 つの行になります。
この LINQ クエリを実行するにはどうすればよいですか?
.Sum(...)
各列に固有のものを作成するのは困難です。
多くの列(〜200)を持つSQLテーブルがあります。
すべての行の合計を列ごとに取得する LINQ クエリを作成したいと考えています。結果は、各列の合計を表す 1 つの行になります。
この 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());
私はこのソリューションを使用しました:
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())
{
...
}
しかし、プロパティがないため、これは機能していません。
sqlcommand を使用できます。このコマンドを実行すると、行ごとに結果の配列が返され、array.Sum() を使用できます。
または、SQL 計算列を追加します。