我想知道是否有人可以提供帮助。
我使用以下代码从数据库中检索一些数据并将其输出为JSON:
public ActionResult PieDataPropertyTotalsByStatusSO()
{
var db = new Coyote_AcquisitionsContext();
IQueryable<Property> query = db.Properties;
var propertyTotalsByStatus =
query.GroupBy(p => p.Status).OrderByDescending(p => p.Count()).Select(pg => new { Status = pg.FirstOrDefault().Status.Name, Count = pg.Count() }).ToList();
return Json(propertyTotalsByStatus, JsonRequestBehavior.AllowGet);
}
输出数据如下:
[
{ "Count" : 1205,
"Status" : "General Stock (Rejected)"
},
{ "Count" : 816,
"Status" : "New Introduction"
},
{ "Count" : 653,
"Status" : "Potential"
},
{ "Count" : 110,
"Status" : "Completed"
}
]
然而,为了节省带宽(并且因为这是我正在使用的图表库所期望的格式),我需要去掉键并最终得到:
[
[ 1205, "General Stock (Rejected)" ],
[ 816, "New Introduction" ],
[ 653, "Potential" ],
[ 110, "Completed" ]
]
我无法找到一种优雅的方式。我最终可能会有更多或更少的字段,而不仅仅是Count和Status,所以我不能使用一个解决方案,它根据它们正好是两个不同的字段。
任何帮助都非常感激。
编辑:
更正了我要输出的JSON。
答案 0 :(得分:4)
您想要的格式不是有效的JSON。你可以得到以下信息:
[
[ 1205, "General Stock (Rejected)" ],
[ 816, "New Introduction" ],
[ 653, "Potential" ],
[ 110, "Completed" ]
]
通过
var propertyTotalsByStatus =
query.GroupBy(p => p.Status)
.OrderByDescending(p => p.Count())
.Select(pg => new { Status = pg.FirstOrDefault().Status.Name, Count = pg.Count() })
.ToList()
.Select(x => new object[] { x.Status, x.Count })
.ToList();
答案 1 :(得分:0)
听起来像C#中的字典。
var dataDict = propertyTotalsByStatus.ToDictionary(item => item.Status, item => item.Count);
return Json(dataDict , JsonRequestBehavior.AllowGet);