0

我有一个基于 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();
        }

如上所示,如何为每条记录调用 .ToUniversalTime() 方法?

理想情况下,我不想先调用 .ToList() 然后过滤。

如果根本不支持,如何将 LINQ 扩展到 NHibernate 以支持此特定功能?

4

1 回答 1

1

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

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

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

您将不得不考虑另一种方法来执行您的测试。

于 2013-06-12T15:16:38.170 回答