次のようなデータを返すクエリがあります。
Event | Sum | Date
sent | 400 | 1/1/12
open | 200 | 1/1/12
click | 50 | 1/1/12
sent | 300 | 1/8/12
open | 150 | 1/8/12
click | 30 | 1/8/12
SQL クエリ:
select event, sum(thecount), rundate
from send_open_click_counts
group by event, rundate
order by rundate, event desc
これらの値を Google ビジュアライゼーション API に送信してグラフをレンダリングするには、値を次のように配置する必要があります。
['date' , 'sent' , 'opened' , 'clicked']
['1/1/12', '400' , '200' , '50']
['1/8/12', '300', '150' , '30']
私はこのことにあまり詳しくありませんが、私にとっては日付によってピボットされています。
元のSQLをシミュレートするために使用したlinqクエリは次のとおりです
var dbLinqObj= from r in db.SEND_OPEN_CLICK_COUNTS
group r by new { r.EVENT, r.RUNDATE } into g
select new {
EVENT = g.Key.EVENT,
THECOUNT = g.Sum(r => r.THECOUNT),
RUNDATE = g.Key.RUNDATE
} ;
dbLinqObj= dbLinqObj.OrderBy(r => r.RUNDATE);
====編集====解決策が見つかりました=====
これをさらに掘り下げ、コメントからいくつかの提案を得た後、LINQ を使用したエレガントなソリューションを見つけました。
JSON 文字列に簡単に変換できるように、結果を適切にピボットする LINQ を次に示します。
var query = from q in db.SEND_OPEN_CLICK_COUNTS
group q by q.RUNDATE into g
select new
{
Date = g.Key,
Send = g.Where(x => x.EVENT == "sent").Sum(x => x.THECOUNT),
Open = g.Where(x => x.EVENT == "opened").Sum(x => x.THECOUNT),
Click = g.Where(x => x.EVENT == "clicked").Sum(x => x.THECOUNT)
};