加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:21:23 所属栏目:百科 来源:网络整理
导读:无论何时与这些记录相关联,我都希望从特定日期获取所有记录.到目前为止,我有这样的方法: public IQueryableRecord QueryByDay(DateTime day){ DateTime from = day.Date; DateTime to = day.Date.AddDays(1); return repository.Table .Where(t = t.MyDate
无论何时与这些记录相关联,我都希望从特定日期获取所有记录.到目前为止,我有这样的方法:
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中的日期函数.这更复杂,但允许构建更多动态查询:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读