【发布时间】:2015-01-09 12:51:44
【问题描述】:
我目前正在尝试将 order by 添加到 LINQ 查询中,该查询将按 EF 对象中的 datetime 字段进行排序:
return this.SortingDirection.Equals("asc", StringComparison.InvariantCultureIgnoreCase) ? entities.OrderBy(e => e.ProcessStartTime) : entities.OrderByDescending(e => e.ProcessStartTime);
当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'
对于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'
日期和月份已交换,导致 sql 查询未返回任何结果。
这对我来说表明IQueryable.OrderBy() 方法没有使用正确的本地格式/与OrderByDescending() 不同的格式,这可能是 EF 中的错误吗?
我的连接字符串中是否有一些内容可以添加以强制执行此操作或可以按这些日期排序的其他方式?
我的设置:
- .NET 4.5
- 实体框架 5.0.0
- SQL Server 2012 标准版
非常感谢
【问题讨论】:
-
为什么会有一个特定的日期时间值,例如'2015-01-07',是否涉及order by子句?
标签: c# sql-server linq entity-framework