次のようなデータテーブルがあります。
Category Description CurrentHours CTDHours
LC1 Cat One 5 0
LC2 Cat Two 6 0
LC3 Cat Three 18 0
LC1 Cat One 0 9
LC2 Cat Two 0 15
LC4 Cat Four 0 21
これをグループ化して合計する必要があること:
Category Description CurrentHours CTDHours
LC1 Cat One 5 14
LC2 Cat Two 6 21
LC3 Cat Three 18 0
LC4 Cat Four 0 21
つまり、2つの時間列をカテゴリ列と説明列でグループ化する必要があります。
新しいテーブルを作成して既存のデータをループ処理し、データを新しいテーブルに合計できることはわかっていますが、Linqを使用して簡単に実行できる方法があると思いました。私はそれを数時間グーグルで検索しましたが、私が見つけたすべての例は私がやろうとしていることに適合していないようです。
ちなみに、データテーブルを作成するodbcドライバーには、サブクエリなどの機能がないか、SQLを使用してそれを実行しただけです。
匿名オブジェクトを使用して、カテゴリと説明でグループ化します。次に、グループ化された時間を返すLinq to DataSetクエリを示します。
from r in table.AsEnumerable()
group r by new {
Category = r.Field<string>("Category"),
Description = r.Field<string>("Description")
} into g
select new {
Category = g.Key.Category,
Description = g.Key.Description,
CurrentHours = g.Sum(x => x.Field<int>("CurrentHours"),
CTDHours = g.Sum(x => x.Field<int>("CurrentHours") + x.Field<int>("CTDHours"))
}
データベースを照会している場合(質問から明確ではない):
from r in context.Table
group r by new {
r.Category,
r.Description
} into g
select new {
g.Key.Category,
g.Key.Description,
CurrentHours = g.Sum(x => x.CurrentHours),
CTDHours = g.Sum(x => x.CTDHours + x.CurrentHours)
}
CurrentHours
とCTDhours
を合計する必要があるので、
select new {
...
CTDHours = g.Sum(x => x.Field<int>("CTDHours") + g.Sum(x => x.Field<int>("CurrentHours")
}