掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DataTable& Aggregateでの集計 (ID:143431)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> すべての値の平均をAggregate句を使って求めたいのですが > Dim Sum_Wt as Double 平均なのに、変数名が Sum なのは何故でしょうか? > Sum_Wt= Aggregate wt As XXXX In YYYY Into Average() > '↑のXXXX と YYYY のところの記述がわからないです。 Into 句を見直した方が良いでしょう。 提示された構文だと、XXXX は「Double」で済みますが、 YYYY の部分が、「TB.AsEnumerable().Select(Function(r) CDbl(r!体重))」 などのような複雑な構文になってしまいます。 Into 句を見直した書き方としては、こんな感じ。 Dim Ave1 As Double = Aggregate row In TB Into Average(row.Field(Of Double)("体重")) あるいは、こんな書き方もあります。 Dim Ave2 As Double = (From row In TB Select row.Field(Of Double)("体重")).Average() Linq を使わず、DataTable の Compute メソッドを使う手もあります。 この方法だと、より古いバージョンの VB.NET でも算出できます。 Dim Ave3 As Double = CDbl(TB.Compute("Avg(体重)", "")) いずれの方法を使うにしろ、件数が 0 だった場合の扱いに注意してください。 たとえば TB.Compute を使った方法では、0件の場合の戻り値が DBNull になるため、その結果を CDbl すると変換エラーとなります。 また、上記 Ave1, Ave2 の構文も、0 件の時は要素なしエラーとなります。 データ件数が 0 の場合も考慮するためには、このような書き方ができます。 Dim Ave0 As Double = (From row In TB Select row.Field(Of Double)("体重")).DefaultIfEmpty().Average() あるいは、事前に「If TB.Count > 0 Then」などの判定を入れるのも手です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.