订购奇怪的数据linq

时间:2016-12-25 12:44:00

标签: c# linq

我有以下格式的动态对象列表

period       key      value
"2013-3"     mykey1   5
"2013-4"     mykey1   6
.
.
.
"2013-10"    mykey1   15
"2013-11"    mykey1   25
"2013-12"    mykey1   6

我想要的是获取key ==" mykey1"按期间排序。

我试过以下..

data.Where(w => w.key  == "mykey1").OrderBy(i => i.period).Select(s => s.value).ToArray();

如果期间是字符串,则会在2013-3之前从2013-10到2013-12获得数据。

3 个答案:

答案 0 :(得分:3)

您可以使用

data.Where(w => w.key  == "mykey1").OrderBy(i => DateTime.ParseExact(i.period, "yyyy-M",
                                       System.Globalization.CultureInfo.InvariantCulture)).Select(s => s.value).ToArray();

答案 1 :(得分:1)

这是因为它正在排序string值而不是Date值。

您可以尝试将值解析为OrderBy子句中的日期。

类似的东西:

data.Where(w => w.key  == "mykey1")
    .OrderBy(i => DateTime.Parse(i.period)).Select(s => s.value).ToArray();

答案 2 :(得分:0)

你可以用零填充。像这样:

data.Where(w => w.key  == "mykey1").OrderBy(i => i.period.PadLeft(i.period.Max(x => x), '0'))
    .Select(s => s.value).ToArray();

该垫的结果将是:

"02013-3",
"02013-4",
"2013-10",
"2013-11",
"2013-12"

因此它将按预期命令此列表。