在c#中将匿名类型列表转换为简单数组

时间:2014-02-04 19:25:36

标签: c# asp.net-mvc

我想知道是否有人可以提供帮助。

我使用以下代码从数据库中检索一些数据并将其输出为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。

2 个答案:

答案 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);