Linq Orderby降序不适用于DateTime

Linq Orderby降序不适用于DateTime,linq,linq-to-sql,Linq,Linq To Sql,所以我得到了这个linq到sql查询: DateTime dtePast = new DateTime(1970, 1, 1); Datetime newestDate = (from e in tblExpenses join rd in tblRepairDetails on e.ExpenseItemID equals rd.ExpenseItemID orderby (DateTime)e.ExpenseDate descending select e.ExpenseDate).Def

所以我得到了这个linq到sql查询:

DateTime dtePast = new DateTime(1970, 1, 1);

Datetime newestDate = (from e in tblExpenses
join rd in tblRepairDetails on e.ExpenseItemID equals rd.ExpenseItemID
orderby (DateTime)e.ExpenseDate descending
select e.ExpenseDate).DefaultIfEmpty(dtePast).First();
如果不使用.First()方法,它将返回以下4个日期的完整列表:

2013年3月18日12:00

2012年5月14日12:00

2012年7月2日12:00

2012年10月1日12:00

但是,对于.First()方法,它会返回1/10/2012,而不是应该返回的3/18/2013。无论我尝试什么,都会返回最早的日期,而不是最新的日期。我怎样才能得到最新的约会?我已经花了三个小时在这上面了,我想不出来

==编辑#1==

以下是实际代码:

DateTime dteNewestOccurrance = (from ve in context.tblVehicleExpenses
join rd in context.tblVehicleRepairDetails on ve.ExpenseItemID equals rd.ExpenseItemID
where ve.VehicleID == strVehicleID && rd.ActivityName == a.ActivityID
orderby (DateTime)ve.ExpenseDate descending
select ve.ExpenseDate).DefaultIfEmpty(dtePast).First();
同样,此代码拒绝返回最新日期(2013年3月18日)。我尝试了升序、降序、.OrderByDescending()等,但它拒绝给出最新日期

==编辑#2==

好的,经过一些测试,这段代码确实有效:

var varOccurranceList = from ve in context.tblVehicleExpenses
  join rd in context.tblVehicleRepairDetails on ve.ExpenseItemID equals rd.ExpenseItemID
  where ve.VehicleID == strVehicleID && rd.ActivityName == a.ActivityID
  orderby (DateTime)ve.ExpenseDate descending
  select ve.ExpenseDate;

DateTime dteNewestOccurrance = DateTime.Now;
if (varOccurranceList.Count() > 0)
   dteNewestOccurrance = varOccurranceList.First();
else
   dteNewestOccurrance = dtePast;

.DefaultIfEmpty()和/或.First()似乎会破坏代码并导致意外结果。我想要么我不明白如何正确使用这两种Linq方法,要么它们有严重的问题。我对此不满意。

假设ExpenseDate可为空,请尝试以下方法:

DateTime dteNewestOccurrance = (from ve in context.tblVehicleExpenses
join rd in context.tblVehicleRepairDetails on ve.ExpenseItemID equals rd.ExpenseItemID
where ve.VehicleID == strVehicleID && rd.ActivityName == a.ActivityID
orderby ve.ExpenseDate descending
select ve.ExpenseDate).FirstOrDefault() ?? dtePast;

你看过它生成的SQL了吗?请注意,您给出的代码甚至不会编译,这表明它不是您真正的代码。请发布你的真实代码-可能你的真实代码中的错误没有显示出来,因为你在复制时意外删除了它…不要将其添加为注释-将其编辑到你的问题中。只是好奇,为什么在oderby子句中显式强制转换ve.ExpenseDate?milter:强制转换是为了解决这个问题。演员阵容不是《守则》第一次修订的一部分。另一方面,我觉得不需要这个日期时间转换。为什么要先使用OrderBy,然后再使用First()。这就是Max()的原因。它给出了一个错误:“运算符'?'不能应用于System.DateTime类型的操作数”这就是为什么我说“假设ExpenseDate可为null”。