2012-03-07 33 views
1

我有一組簡單的數據,我無法弄清楚如何使用LINQ創建投影。如何將簡單數據集投影到匿名類型的不同形狀

public class Score { 
    public string Name { get; set; } 
    public int Value { get; set; } 
} 

var scores = new List<Score> { 
    new Score { Name = "jesse", Value = 10 }, 
    new Score { Name = "jesse", Value = 12 }, 
    new Score { Name = "jesse", Value = 15 }, 
    new Score { Name = "billy", Value = 5 }, 
    new Score { Name = "billy", Value = 7 }, 
    new Score { Name = "billy", Value = 20 }, 
    new Score { Name = "colin", Value = 25 }, 
    new Score { Name = "colin", Value = 13 }, 
    new Score { Name = "colin", Value = 8 } 
}; 

我需要將'分數'投影到具有以下結構的匿名類型中。

{ 
    series : [ 
    { name : "jesse", data : [10, 12, 15 ] }, 
    { name : "billy", data : [ 5, 7, 20 ] }, 
    { name : "colin", data : [25, 13, 8 ] } 
    ] 
} 

任何幫助表示讚賞。

回答

1
var result = new { 
    series = from score in scores 
      group score.Value by score.Name into nameValues 
      select new 
      { 
      name = nameValues.Key, 
      data = nameValues 
      } 
}; 
+0

這正是我正在尋找的。謝謝!我稍微改變了你的答案,以便它能夠預測出我正在尋找的確切形狀,但是「逐個組合」聲明真的是這裏的關鍵。 – jessegavin 2012-03-07 04:27:22

1

這是否符合你想要的結構?

var query = scores.GroupBy(s => s.Name); 
var result = query.Select(q => new { 
    Name = q.Key, 
    Data = q.ToArray().Select(k => k.Value) 
}); 
var anotherAnon = new {series = result.ToArray()}; 
+0

是它。我編輯了你的答案,以反映我對我做作的例子所作的修改。謝謝。 – jessegavin 2012-03-07 03:57:08