c# - 使用 nhibernate 按日期获取记录,仅进行日期部分比较

标签 c# linq nhibernate linq-to-nhibernate

我想获取特定日期的所有记录,无论与这些记录关联的时间是什么。到目前为止,我有这样的方法:

public IQueryable<Record> QueryByDay(DateTime day)
{
    DateTime from = day.Date;
    DateTime to = day.Date.AddDays(1);

    return repository.Table
        .Where(t => t.MyDate >= from && t.MyDate < to);
    }

但是在 linq-to-object 中我们可以这样做(假设 Table 现在是一些集合):

public IEnumerable<Record> QueryByDay(DateTime day)
{
    return repository.Table
        .Where(t => t.MyDate.Date == day.Date);
}

这显然更具可读性,感觉更干净。我想知道是否有更好的方法来编写使用数据库存储和 nhibernate 的第一个方法?

最佳答案

如评论中所述,您的 LINQ 查询适用于 NH 3.3。

在早期版本中,您可以使用 HQL:

return session.CreateQuery("from MyClass where date(MyDate) = :day")
              .SetParameter("day", day.Date)
              .List<MyClass>(); //executes

您还可以通过 SqlFunction 使用 Criteria 中的 date 函数。这更复杂,但允许构建更多动态查询:

return session.CreateCriteria<Foo>()
              .Add(Restrictions.Eq(
                       Projections.SqlFunction("date",
                                               NHibernateUtil.Date,
                                               Projections.Property("MyDate")),
                       day.Date))
                .List<MyClass>(); //executes

关于c# - 使用 nhibernate 按日期获取记录,仅进行日期部分比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920108/

相关文章:

c# - 如何在 Unity3D 的 OnDrawGizmos 中以屏幕像素坐标绘制某些内容?

c# - 获取不为空的属性名称

c# - 如何防止 Fluent NHibernate 将 "Parent"表的 FK 添加到关系表中?

caching - NHibernate SysCache 不缓存子对象

c# - 将 RGB 字节转换为 HSL 并返回?

c# - 如何将 C# 日期时间值转换为 UTC 时区

c# - Entity Framework LINQ 包含不区分大小写

nhibernate - 将 Nhibernate.Search 与 Nhibernate 2 集成

c# - 应用程序在基于 .NET 的 COM 对象的 CoCreateInstance 期间挂起

c# - 使用 linq 删除列表中的重复项