给定一个DateTime,当使用LINQ来NHibernate时,如何调用.tuniveraltime

本文关键字:NHibernate tuniveraltime LINQ 何调用 调用 一个 DateTime | 更新日期: 2023-09-27 18:18:16

我有一个方法,返回基于EventTypeID的所有事件:

 public IList<Event> FindAll(int eventTypeId, DateTime? modifiedSince)
        {
            IQueryable<Event> query = this.SessionFactory.Session.Query<Event>().Where(e => e.EventType.Id == eventTypeId);
            if (modifiedSince.HasValue)
            {
                // .ToUniversalTime() call throws NotSupportedException
                query = query.Where(et => et.ModifiedDate.ToUniversalTime() >= modifiedSince.Value);
            }
            return query.ToList();
        }

如何为上面所示的每条记录调用。tuniversaltime()方法?

理想情况下,我不想先调用。tolist(),然后再调用filter.

如果它根本不被支持,我如何将LINQ扩展到NHibernate来支持这个特定的特性?

给定一个DateTime,当使用LINQ来NHibernate时,如何调用.tuniveraltime

这可能有点难以解决,因为我希望您正在检索的数据行包含不同时区的时间。

出现此问题是因为您的et.ModifiedDate.ToUniversalTime()调用在查询中传递,而查询的目标不支持该操作(这就是为什么您在运行时而不是编译时看到此操作)。

为了避免这种情况,通常在查询块之外执行所需的计算并传入该值。

您必须考虑另一种方法来执行您的测试。