0

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 !

Gilad Green
  • 36,708
  • 7
  • 61
  • 95
Eric K.
  • 814
  • 2
  • 13
  • 22

2 Answers2

1

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

Community
  • 1
  • 1
Ashley John
  • 2,379
  • 2
  • 21
  • 36
  • I feel like I got your idea, but somehow, I play around with the code, still not able to make it. Still having same error. – Eric K. Jul 29 '16 at 07:01
0

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);
michael berezin
  • 1,146
  • 7
  • 8