【发布时间】:2014-06-17 23:04:34
【问题描述】:
这里还在学习 Linq。所以我有一个看起来像这样的类(来自一个 db 表):
class FundRaisingData
{
public double funds { get; set; }
public DateTime date { get; set; }
public string agentsGender { get; set; }
}
我需要做的是将它转换为看起来像这样的匿名对象列表(稍后它将被转换并返回为 JSON)。我知道这不是一个匿名对象,但它会让您对我正在尝试做的事情有所了解:
class groupedFunds
{
public string gender { get; set; }
public List<double> fundsRaised { get; set; }
}
因此,我需要弄清楚如何以正确的顺序(2010-2014 年)汇总每年的资金。
最终它在 JSON 中应该是这样的:
ListOfGroupedFunds[
{
"gender" : "Female",
"fundsRaised" : [2000, 2500, 3000]
},
{
"gender" : "Male",
"fundsRaised": [4300,2300,3100]
}
];
因此,fundsRaised[0] 对应于 2012,fundsRaised[1] 对应于 2013 等等,但实际上在对象中的任何位置都没有说“2013”。
我今天在 Linq 上阅读了大量文章并搜索了类似的 StackOverflow 文章,但我仍然无法完全弄清楚。任何能指引我正确方向的帮助都会很棒。
-- 编辑2(更改代码更匹配解决方案)--
我认为 Mike 的代码运行良好,但因为我不确定提前多少年,所以我稍微修改了一下:
var results = data.GroupBy(g=> Gender = g.agentsGender)
.Select(g=> new
{
gender = g.Key
years = g.GroupBy(y=> y.Date.Year)
.OrderBy(y=> y.Key)
.Select(y=> y.Sum(z=> z.funds))
.ToArray()
})
.ToArray();
上面有什么问题吗?它似乎有效,但我当然愿意接受更好的解决方案。
【问题讨论】: