我有以下格式的动态对象列表
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获得数据。
答案 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"
因此它将按预期命令此列表。