0

我是 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">

ETC...

这本字典有一个键,它是一个日期和一个值,它是一个包含 24 个数字的 CSV 字符串(从 00:00 开始,一天中的每个小时一个)。我想把它转换成字典

<01/07/12 00:00, 23>

<01/07/12 01:00, 5>

<01/07/12 02:00, 654>

ETC...

我一直在尝试一段时间,认为答案在于使用 SelectMany,但无法让任何工作。我知道我可以使用一些循环来做到这一点,但我真的很想看到一个 LINQ 实现。

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

4

1 回答 1

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));
于 2012-05-04T18:16:18.260 回答