我有一個Linq查詢從數據庫中獲取一組日期和值,我需要能夠使用JSON將其推送到HighCharts圖表中。對一個對象數組的LINQ查詢
我一直在使用我平時linqy東西查詢是這樣的:
var data = _db.CampaignValues.GroupBy(t => t.ValueDate)
.Select(g => new GraphValue() { T = g.Key, V = g.Sum(t => t.MessageCount) })
.OrderBy(g => g.T)
.Where(g => g.T > start)
.ToArray()
;
有關背景,我試圖將數據拉成HighCharts「時間數據隨着Inrregular週期」表。在他們的例子給出的數據格式爲:
data: [
[Date.UTC(1970, 9, 27), 0 ],
[Date.UTC(1970, 10, 10), 0.6 ],
[Date.UTC(1970, 10, 18), 0.7 ],
[Date.UTC(1970, 11, 2), 0.8 ]
]
我的問題是,我似乎無法得到成JSON格式,這符合以上。我要麼得到引用的值,要麼是錯誤佈局的數組。
我試過在視圖中使用JsonConvert,但現在我受限於我對JS和Linq的知識。
@model IQueryable<GatorWatch.Web.Controllers.GraphValue>
@{
var data = JsonConvert.SerializeObject(Model.ToList());
}
<script type="text/javascript">
var chart1;
$(document).ready(function() {
chart1 = new Highcharts.Chart({
//snip
series: [{
type: 'line',
name: 'Messages',
data: [@Html.Raw(data)]
}]
});
});
<script type="text/javascript">
但是,創建一個字符串是這樣的:
data: [[
{"T":"2013-01-02T00:00:00","V":684112},
{"T":"2013-01-03T00:00:00","V":524172},
{"T":"2013-01-04T00:00:00","V":769807},
{"T":"2013-01-05T00:00:00","V":25076}
]]
另一種方法是使用DotNet.Highcharts庫。由庫給出的例子是數據要在形式:
var data = new object[,]
{
{new DateTime(1970, 9, 27), 0},
{new DateTime(1970, 10, 10), 0.6},
{new DateTime(1970, 10, 18), 0.7},
{new DateTime(1970, 11, 2), 0.8},
}
這是我想出了亞歷克斯的答案的幫助下解決方案。
在控制器:
private static long ToJavaScriptMilliseconds(DateTime dt)
{
long datetimeMinTimeTicks = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks;
return (long)((dt.ToUniversalTime().Ticks - datetimeMinTimeTicks)/10000);
}
public ActionResult Index()
{
var v1 = _db.CampaignValues.GroupBy(t => t.ValueDate)
.Select(g => new GraphValue() { T = g.Key, V = g.Sum(t => t.MessageCount) })
.Where(g => g.T > start)
.OrderBy(g => g.T)
.AsEnumerable()
.Select(g => new object[] { ToJavaScriptMilliseconds(g.T), g.V })
.ToArray()
;
return View(v1);
}
然後在視圖:
@model object[][]
// snip
series: [{
type: 'line',
name: 'Messages',
data: @Html.Raw(JsonConvert.SerializeObject(Model))
}]
問題是..? – 2013-02-21 14:28:22
Gah,對不起,這是發佈問題時發生的問題,同時詢問工作中的其他問題。我會用我已經嘗試過的東西來更新這個問題的諷刺。對不起 – Cylindric 2013-02-21 14:38:10