13

次のようなデータテーブルがあります。

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  

つまり、Category 列と Description 列でグループ化された 2 つの Hours 列を合計する必要があります。

新しいテーブルを作成して既存のデータをループし、データを新しいテーブルに合計できることはわかっていますが、Linq を使用してそれを行う簡単な方法があると思いました。数時間グーグルで検索しましたが、見つけたすべての例は、私がやろうとしていたことに適合していないようでした.

ところで、データ テーブルを作成する odbc ドライバーには、サブクエリなどの機能がありません。または、SQL を使用して実行しただけです。

4

2 に答える 2

33

匿名オブジェクトを使用して、カテゴリと説明でグループ化します。グループ化された時間を返す 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)
}
于 2013-06-25T14:14:43.970 に答える