2016-07-29 74 views
0

我的意圖是使用LINQ查詢,然後返回JSON的MVC控制器。LINQ C#MVC中的數組JSON對象

格式我想要實現:

[{ 
    "A" : {"Count": 2 }, 
    "B" : {"Count": 7 }, 
}] 

[{ 
    "A" : [{"Count": 2 }], 
    "B" : [{"Count": 7 }], 
}] 

但到目前爲止,我只可以這樣說:

[{ 
    {"MG":"A", "Count": 2 }, 
    {"MG":"B", "Count": 7 } 
}] 

我嘗試像下面,它會得到錯誤

無效的匿名類型成員聲明符。匿名類型成員必須使用成員分配,簡單名稱或成員訪問來聲明 。

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); 
} 

感激,如果有人可以點我到正確方向。謝謝 !

回答

1

如果我理解正確,您需要動態屬性名稱。您只能使用Expando對象

您可以嘗試圍繞這些行。

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()})); 

你可以看看這些問題的答案爲更多的靈感Dynamic properties

+0

我覺得我得到了你的想法,但不知何故,我玩弄了代碼,仍然無法做到。仍然有相同的錯誤。 –

0

可以使用json.net/newtonsoft創建一個JSON對象

using Json.net 
var countObject = new JObject(); 
countObject.Add("count",2); 
var jsonObject = new JObject(); 
jsonObject.Add("a", countObject); 
+0

謝謝邁克爾,年方法將需要一個循環,但我尋找使用linq的方法。 –

+0

您是否嘗試過使用linq foreach?https://msdn.microsoft.com/en-us/library/bwabdf9z(v = vs.110).aspx –

+0

還沒有,謝謝你的想法我會嘗試。 –