LINQを使用してDataTableのデータをグループ化したい(列:userid、chargetag、charge)。
コンテンツは次のようになります。
userid chargetag charge
-----------------------------
user1 tag3 100
user2 tag3 100
user3 tag5 250
結果として、次のようなものが必要です。
chargetag count sum
-------------------------
tag3 2 200
tag5 1 250
これは私がこれまでに持っているものです:
var groupedData = from b in dataTable.AsEnumerable()
group b by b.Field<string>("chargetag") into g
let count = g.Count()
select new
{
ChargeTag = g.Key,
Count = count,
};
チャージタグの名前と番号を抽出できます。料金の合計にもアクセスするには、LINQクエリをどのように変更する必要がありますか?
前もって感謝します :-)
よろしく、ケビン
これは非常に簡単です。グループでSum
拡張メソッドを使用するだけです。
var groupedData = from b in dataTable.AsEnumerable()
group b by b.Field<string>("chargetag") into g
select new
{
ChargeTag = g.Key,
Count = g.Count(),
ChargeSum = g.Sum(x => x.Field<int>("charge"))
};
(実際には何も購入していなかったため、ここでlet
句を削除しました。)
さてmay非効率的です; 2つの集計操作を実行するために、2回グループ化される可能性があります。あなたcould本当に必要な場合は、このようなクエリ継続でそれを修正します。
var groupedData = from b in dataTable.AsEnumerable()
group b by b.Field<string>("chargetag") into g
select new
{
ChargeTag = g.Key,
List = g.ToList(),
} into g
select new
{
g.ChargeTag,
Count = g.List.Count,
ChargeSum = g.List.Sum(x => x.Field<int>("charge"))
};
または、代わりにlet
句を使用します。
var groupedData = from b in dataTable.AsEnumerable()
group b by b.Field<string>("chargetag") into g
let list = g.ToList()
select new
{
ChargeTag = g.Key,
Count = list.Count,
ChargeSum = list.Sum(x => x.Field<int>("charge"))
};