私はいくつかの列を含むデータテーブルを持っています。 私は、グループ化せずに、LINQでこれらの平均値を計算したい: 私はこれを試してみました:グループ化せずにlinqで平均を計算する
dtPointCollFb.GroupBy(r => 1).Select(r => new
{
Plus100 = r.Average(item => item.PLUS100),
Plus50 = r.Average(item => item.PLUS50),
Plus10 = r.Average(item => item.PLUS10),
Plus5 = r.Average(item => item.PLUS5),
Plus1 = r.Average(item => item.PLUS1),
NULLA = r.Average(item => item.NULLA)
}).ToList()
これは私が合計を計算する際に、完璧に動作しますが、平均的には最初のレコードの値を生成し、いないすべてのレコードの平均。 これは不要です:.GroupBy(r => 1)私は定数でグループ化しているためです。
しかし、これなしで、私はちょうど全体のクエリのための、そして唯一の列の平均使用することはできません。
dtPointCollFb.Average(r => r.PLUS100)
だから、誰かが簡単なベストプラクティスソリューションを作り出すことができますか? メソッドの構文で可能な場合は、クエリではありません。
dtPointCollFb.GroupBy(r => 0).Select(r => new
{
Plus100 = r.Sum(item => item.PLUS100)/dtPointCollFb.Rows.Count,
Plus50 = r.Sum(item => item.PLUS50)/dtPointCollFb.Rows.Count,
Plus10 = r.Sum(item => item.PLUS10)/dtPointCollFb.Rows.Count,
Plus5 = r.Sum(item => item.PLUS5)/dtPointCollFb.Rows.Count,
Plus1 = r.Sum(item => item.PLUS1)/dtPointCollFb.Rows.Count,
NULLA = r.Sum(item => item.NULLA)/dtPointCollFb.Rows.Count
}).ToList()
が、簡単かつきれいな方法で:
は、私はこのような何かをしたいです。これにより、平均値が正しく生成されます。
同じではありませんが、別々に平均を計算することをお勧めします。 – speti43
レコードの場合、 'GroupBy'構造は、データベースへの1回のラウンドトリップですべての平均を計算することを意図しています。 – Rawling
はい、あなたは正しいです、私はSQLサーバーから多くのデータを転送するため、これが最善の方法です。このパターンは、linqを使用してWebサーバー上で複数の集約を行うように設計されています。私は同じデータ収集から異なるものを計算します。私は5つの異なるSQLクエリでそれを行うことができます。私は知らないかもしれませんが、おそらくそれは良いでしょう。 – speti43