LINQ查询转换CSV数据

时间:2012-05-04 17:28:44

标签: linq csv linq-to-objects

我是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实现。

非常感谢你能帮助我。 科林。

1 个答案:

答案 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));