##やりたい事
DataTableの特定列をグループ化してSumしたレコードを取り出ししたい
##前提
DataTable tableを.AsEnumerable()し、GroupByした。
列構成(例)
Hoge1Code(String)
Hoge1Name(String)
Hoge2Code(String)
Hoge2Name(String)
Fuga1(Decimal)
Fuga2(Decimal)
##失敗例
var rt = table.AsEnumerable()
.GroupBy(row => new {
hoge1Code= row.Field<string>("Hoge1Code")
,hoge2Code= row.Field<string>("Hoge2Code")
そして
var rv =rt.ToList().Select(x =>
{
hoge1Name=x.Select(y => y["Hoge1Name"].ToString());
Fuga2Sum=x.Sum(y => (Decimal)y["Hoge1Name"]);
}
とすると
System.Linq.Enumerable+WhereSelectListIterator
となる。
##成功例
var rt = table.AsEnumerable()
.GroupBy(row => new {
hoge1Code= row.Field<string>("Hoge1Code")
,hoge1Name= row.Field<string>("Hoge1Name")
,hoge2Code= row.Field<string>("Hoge2Code")
,hoge2Name= row.Field<string>("Hoge2Name")
として
var rt = table.AsEnumerable()
.GroupBy(row => new {
row.Key.hoge1Name
以後略
とした。
##考察
SQLに置き換えて考える
select hoge2Code from
(select 'aa' as hoge1Code ,'bb' as hoge2Code ,0 as 'cc') as t
group by hoge1Code
とすると
列 't.hoge2Code' は選択リスト内では無効です。この列は集計関数または GROUP BY 句に含まれていません。
てーのと同じだよね?
##補足など
記念すべき初投稿である。
LINQはなんどかチャレンジしたが身につけられていない。お恥ずかしい限り。