2013-06-11 32 views
2

這看起來應該相當容易,但由於某種原因,我的大腦並不合作。分組爲數組

我有這個調用一個簡單的方法:

return Json.Encode(
    Models 
    .GroupBy(e => e.Gender) 
    .Select(g => new { 
     Gender = g.Key, 
     Count = g.Count() 
    }).ToArray() 
); 

這將產生以下JSON:

[{"Gender":"Male","Count":2},{"Gender":"No Answer","Count":1}] 

不過,我想JSON對象看起來像這樣:

[ 
    ['Male', 2], 
    ['No Answer', 1] 
] 

我試過使用一個元組和字典無濟於事。我確信一旦這個答案我就會踢自己。

+0

實際上是你希望它是什麼樣子不是JSON,這是一個數組的數組提供的正在表達式初始化屬性的名稱。 –

+3

@MarcMarta這是完全有效的JSON ... –

回答

3

這應做到:

return Json.Encode(
    Models 
    .GroupBy(e => e.Gender) 
    .Select(g => new object[] { g.Key, g.Count() }) 
    .ToArray() 
); 

你想一個數組的數組,所以只需創建陣列。

+0

Argh。我嘗試了類似的東西,但是,我的語法不正確。這工作完美,謝謝! –

1

您可以使用Anonymous Types。這些提供了一種方便的方式來將一組只讀屬性封裝到單個對象中,而無需首先明確定義類型。

因此,只需跳過您的選擇表達式中的GenderCount屬性即可。

return Json.Encode(Models 
        .GroupBy(e => e.Gender) 
        .Select(g => new object[] { g.Key, g.Count()}) 
        .ToArray()); 

注意

  • 如果你沒有在匿名類型指定成員名稱,編譯器爲匿名類型成員所使用的相同的名稱屬性初始化它們。
  • 必須(在你的情況GenderCount