日期/时间在nHibernate中过滤,未正确拾取

时间:2012-07-17 11:03:18

标签: linq nhibernate fluent-nhibernate filtering

关于我的过滤器的另一个问题,但我似乎找不到这个问题的答案,就像我最后一个那样。这个查询是nHibernate Linq而不是ICriteria,就像最后一个一样。

我添加了过滤器,按日期和时间过滤,包含开始日期和结束日期字段。在数据库中只有一个时间字段。这是查询的代码。你们的任何见解都会很棒。

 public List<EventTypeDTO> RunQuery()
    {
        var query = this.session.Query<AppEvent>();

        if (StartDate.HasValue) query = query.Where(a => a.Time >= StartDate);
        if (EndDate.HasValue) query = query.Where(a => a.Time  <= EndDate);
        if (!string.IsNullOrEmpty(OSVersion)) query = query.Where(a => a.App.Version == OSVersion);
        if (!string.IsNullOrEmpty(OSName)) query = query.Where(a => a.App.OperatingSystemName == OSName);
        if (!string.IsNullOrEmpty(Model)) query = query.Where(a => a.Client.ClientInfos.Any(x => x.DeviceModel == Model));
        var results = query.GroupBy(p => p.Type)
            .Select(
            a => new EventTypeDTO
                            {
                                EventType = a.Key.ToString(),
                                Count = a.Count()
                            }).ToList();

        return results; 

在运行查询的同时运行NHProfiler后,很明显问题出在nHibernate的某个地方。出于某种原因,当日期超过每月的第12天时,日期格式从yyyy / mm / dd切换到dd / mm / yyyy。有人有解决方案吗?以下是SQL生成的部分:

where  clientinfo0_.[DateCreated] >= '2012-03-06T23:00:00.00' /* @p0 */ 
   and clientinfo0_.[DateCreated] <= '17/07/2012 00:00:00 +01:00' /* @p1 */

在web.config文件中,我们将全球化文化设置为“en-GB”,并且还更改了用于访问数据库的SQL Server登录帐户的默认语言,这似乎提供了解决。这不是理想的,但它现在会做。仍然希望找到一种正确的方法来阻止nHibernate变得奇怪!

0 个答案:

没有答案