我是LINQ的新手,希望有人可以帮我写出这个查询来转换一些数据。我有Dictionary<DateTime, string>
包含这样的数据....
<01/07/12 00:00, "23,5,654,12,55,45,12,46,673,325,377,234,867,43,1,123,53,12,23,667,23,45,456,87">
<02/07/12 00:00, "22,63,567,13,64,6,4,64,7,2,5,234,667,787,326,234,64,24,5,76,23,556,77,34">
<03/07/12 00:00, "3,746,34,623,5,76,23,6,23,2,78,4,234,76,4,6,8,7,4,3,7645,23,34,6">
等...
此词典有一个键,它是一个日期和一个值,它是一个包含24个数字的CSV字符串(从00:00开始,每天一小时一个)。我想把它转换成字典
<01/07/12 00:00, 23>
<01/07/12 01:00, 5>
<01/07/12 02:00, 654>
等...
我已经尝试了一段时间,现在想到的答案在于使用SelectMany,但是无法让任何事情发挥作用。我知道我可以使用一些循环来实现它,但是我真的希望看到一个LINQ实现。
非常感谢你能帮助我。 科林。
答案 0 :(得分:3)
这个怎么样:
var dict = new Dictionary<DateTime, string>
{
{ new DateTime(2012, 7, 1),
"23,5,654,12,55,45,12,46,673,325,377,234,867,43,1,123,53,12,23,667,23,45,456,87"
},
{ new DateTime(2012, 7, 2),
"22,63,567,13,64,6,4,64,7,2,5,234,667,787,326,234,64,24,5,76,23,556,77,34"
}
};
dict.Select (d => d.Value.Split(new []{','})
.Select ((v,i) => new {
DateTime=d.Key.AddHours(i), Value=v}))
.SelectMany (d => d)
.ToDictionary (d => d.DateTime, d => int.Parse(d.Value));