【发布时间】:2015-07-10 12:15:38
【问题描述】:
我有一个 Web 门户,将 API 解析为一个 Web URL,它通过 JSON 传递。
此数据是使用 Charts 配置的,我们目前使用的是 flot.js
hourlyData 的代码已经存在并插入到 json 图表中。
我正在尝试为每月和每年重新创建此内容。
hourlyData 的当前代码如下所示:
List<dynamic> hourlyData = new List<dynamic>();
DateTime hourIterator = StartDate.Value;
while (hourIterator.Hour <= ddvm.CurrentHour)
{
if (ddvm.HourlyPaymentTotal != null && ddvm.HourlyPaymentTotal.Count() > 0 )
{
HourlyPaymentTotalModel hour = ddvm.HourlyPaymentTotal.FirstOrDefault(hpt => hpt.DateTimeStamp == hourIterator);
if (hour == null) { hour = new HourlyPaymentTotalModel() { DateTimeStamp = hourIterator }; };
hourlyData.Add(new List<dynamic> {hourIterator.Hour,
hour.Amount,
new { tooltip = String.Format("{0} : {1}", hour.Count, hour.Amount.ToString("C")) } });
}
hourIterator = hourIterator.AddHours(1);
}
ddvm.GraphData.LineChart_HourlyTotal.Add(new
{
data = hourlyData,
color = "#A1345E",
label = "Total Amount Paid"
});
如何将hourlyData 重新创建为monthlyData 和yearlyData?
编辑:
public class HourlyPaymentTotalModel : ViewModelBase
{
public int Hour
{
get { return DateTimeStamp.Hour; }
set { DateTimeStamp = new DateTime(1, 1, 1, value, 0, 0); }
}
public string FormattedHour
{
get { return DateTimeStamp.ToShortTimeString().Replace(":00 ", ""); }
set { DateTimeStamp = DateTime.Parse(value); }
}
public DateTime DateTimeStamp { get; set; }
public decimal Amount { get; set; }
public int Count { get; set; }
}
}
这是来自 API 解决方案:
public IQueryable<PaymentSummary> GetHourlyPaymentTotals(DateTime startDate, DateTime endDate, string PaymentProcessor = null, string merchantID=null)
{
transactionRepository = GetTransactionRepository(PaymentProcessor);
IQueryable<IPayment> allPayments = transactionRepository.GetAllPayments(startDate, endDate, merchantID);
var retVal = from ap in allPayments
group ap by new
{
PaymentDateYear = ap.PaymentDate.Value.Year,
PaymentDateMonth = ap.PaymentDate.Value.Month,
PaymentDateDay = ap.PaymentDate.Value.Day,
PaymentDateHour = ap.PaymentDate.Value.Hour
}
into grp_ap
select (new
{
PaymentDateString = grp_ap.Key.PaymentDateMonth.ToString() + "/" + grp_ap.Key.PaymentDateDay.ToString() + "/" + grp_ap.Key.PaymentDateYear.ToString() + " " + grp_ap.Key.PaymentDateHour + ":00",
Amount = grp_ap.Sum(grp => grp.Amount),
Count = grp_ap.Count()
});
return (IQueryable<PaymentSummary>)retVal.ToList().Select(p => new PaymentSummary()
{
PaymentDate = (DateTime?)DateTime.Parse(p.PaymentDateString),
Amount = p.Amount,
Count = p.Count
}).ToList().AsQueryable();
}
更新:我根据 Mairaj Ahmad 提出的解决方案创建了更多模型。 这是使用 dailyData 模型。
我仍然不确定为什么<canvas> 在我的图表字段下显示为空白。
这可能是对指定图表的数据或 flot.js 选项有错误。
var area_chart_payment_by_day_options = {
series: {
lines: {
show: true,
fill: .5
},
points: { show: true }
},
grid: {
borderWidth: 0,
hoverable: true
},
tooltip: true,
tooltipOpts: {
content: "%x : $ %y"
},
xaxis: {
//mode: "categories",
tickDecimals: 0,
min:1,
max:31
},
yaxis: {
tickFormatter: function (y) { return "$ " + y + " "; },
tickDecimals:0
}
}
数据函数
$(function () {
var data = [];
@Html.Raw("data = " + Json.Encode(Model.GraphData.LineChart_DailyTotal) + ";"); //TODO: LineChart_Daily
$.plot($("#area_chart_payment_by_day"), area_chart_payment_by_day,
更新功能
$.plot($("#area_chart_payment_by_day"), area_chart_payment_by_day, area_chart_payment_by_day_options);
【问题讨论】:
-
您能向我们展示您的模型吗?您有什么理由可以按小时分组并汇总这些时间之间的总和吗?
-
编辑添加,日期在 api 解决方案所在的小时模型内分组在一起。
-
你在使用asp.net-mvc吗?
-
你检查过控制台是否有错误?
标签: c# json asp.net-mvc razor asp.net-web-api