Reputation: 834
My intention is to use LINQ query then return JSON for MVC controller.
format I want to achieve:
[{
"A" : {"Count": 2 },
"B" : {"Count": 7 },
}]
or
[{
"A" : [{"Count": 2 }],
"B" : [{"Count": 7 }],
}]
But so far I only can make it like this:
[{
{"MG":"A", "Count": 2 },
{"MG":"B", "Count": 7 }
}]
And I try something like below, it get error
Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.
public JsonResult groupByTable()
{
IQueryable<tblSAPMessage> v = sapMessages();
var data = v.GroupBy(g => g.MaterialGroup)
.Select(g => new { g.Key.ToString() = new {
Count = g.Count()
}});
return Json(data, JsonRequestBehavior.AllowGet);
}
Appreciate if someone can point me to correct direction. Thanks !
Upvotes: 0
Views: 567
Reputation: 1196
you can use json.net / newtonsoft to create a json object
using Json.net
var countObject = new JObject ();
countObject.Add("count",2);
var jsonObject = new JObject();
jsonObject.Add("a", countObject);
Upvotes: 0
Reputation: 2453
if i understand correctly you need dynamic property names. You could achieve it only using Expando Object
You could try something around these lines.
dynamic mytype = new ExpandoObject();
var data = v.GroupBy(g => g.MaterialGroup)
.Select(g => (IDictionary<string, object>) mytype.Add(g.Key.ToString(),
new {Count = g.Count()}));
you could look at these answers for more inspiration Dynamic properties
Upvotes: 1