LINQ Orderby子句导致奇怪的结果

Zyp*_*rax 1 c# linq

我创建了以下LINQ查询来演示此问题:

string[] dateStrings = new string[] { "2009-07-20 13:00:00", "2009-07-20 16:00:00", "2009-07-20 09:00:00" };

DateTime dateValue = DateTime.MinValue;    

var results =
    from dateString in dateStrings
    where DateTime.TryParse(dateString, out dateValue)
    orderby dateValue descending
    select dateValue;
Run Code Online (Sandbox Code Playgroud)

您希望结果是相反顺序的DateTimes列表:
20-7-2009 16:00:00
20-7-2009 13:00:00
20-7-2009 9:00:00

但我得到的只有:
20-7-2009 9:00:00
20-7-2009 9:00:00
20-7-2009 9:00:00

我究竟做错了什么?如果删除orderby语句,您会注意到DateTime的正常列表.

Amy*_*y B 10

声明了dateValue在哪里?注意它只能容纳一个值.

试试这个:

string[] dateStrings = new string[] { "2009-07-20 13:00:00",
  "2009-07-20 16:00:00", "2009-07-20 09:00:00" };

var results =
dateStrings.Select(s => 
{
  DateTime v;
  bool parsed = DateTime.TryParse(s, out v);
  return new {Parsed = parsed, Value = v };
})
.Where(x => x.Parsed)
.Select(x => x.Value)
.OrderByDescending(d => d);
Run Code Online (Sandbox Code Playgroud)


Edw*_*Tai 6

试试这个方法

       var results =
            from dateString in dateStrings
            orderby (Convert.ToDateTime(dateString)) descending
            select (Convert.ToDateTime(dateString));
Run Code Online (Sandbox Code Playgroud)