在linq中以(asc | desc)顺序排序到SQL Server以不同方式处理DateTime

use*_*628 6 c# linq sql-server entity-framework

我目前正在尝试将订单添加到LINQ查询中,该查询将按EF对象中的datetime字段排序:

return this.SortingDirection.Equals("asc", StringComparison.InvariantCultureIgnoreCase) ? entities.OrderBy(e => e.ProcessStartTime) : entities.OrderByDescending(e => e.ProcessStartTime);
Run Code Online (Sandbox Code Playgroud)

SortingDirection设置为desc它工作正常.但是当asc我设置为没有记录!

在查看SQL Server Profiler时,事实证明DateTime对象的格式不同!

用于DESC:

ORDER BY [Project1].[StartTime] DESC',N'...@p__linq__22='2015-01-07 09:00:23',@p__linq__23='2015-01-07 09:00:23',@p__linq__24='2015-01-07 09:05:30',@p__linq__25='2015-01-07 09:05:30'
Run Code Online (Sandbox Code Playgroud)

并为ASC:

ORDER BY [Project1].[StartTime]  ASC',N'...@p__linq__22='2015-07-01 09:00:23',@p__linq__23='2015-07-01 09:00:23',@p__linq__24='2015-07-01 09:05:30',@p__linq__25='2015-07-01 09:05:30'
Run Code Online (Sandbox Code Playgroud)

已交换天数和月份,导致sql查询无法返回结果.

这对我来说这个IQueryable.OrderBy()方法没有使用正确的本地格式/不同格式OrderByDescending(),这可能是EF中的一个错误吗?

我可以添加哪些连接字符串来强制执行此操作或我可以按这些日期排序的其他方式?

我的设置:

  • .NET 4.5
  • 实体框架5.0.0
  • SQL Server 2012 Standard

非常感谢

Cyl*_*Cat 2

您没有显示 linq 查询,但立即想到两件事。首先,SQL Server 有自己的全球化设置,其次,如果日期是参数化的(linq 应该始终这样做),那么您就不需要关心日期字符串格式。