0lu*_*sz0 6 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);
}
Run Code Online (Sandbox Code Playgroud)
但是在linq-to-object中我们可以做(假设Table现在是一些集合):
public IEnumerable<Record> QueryByDay(DateTime day)
{
return repository.Table
.Where(t => t.MyDate.Date == day.Date);
}
Run Code Online (Sandbox Code Playgroud)
这显然更具可读性,感觉更干净.我想知道是否有更好的方法来编写使用数据库存储和nhibernate的第一个方法?
如评论中所述,您的LINQ查询与NH 3.3一起正常工作.
在早期版本中,您可以使用HQL:
return session.CreateQuery("from MyClass where date(MyDate) = :day")
.SetParameter("day", day.Date)
.List<MyClass>(); //executes
Run Code Online (Sandbox Code Playgroud)
您还可以date
通过SqlFunction 使用Criteria中的函数.这更复杂,但允许构建更多动态查询:
return session.CreateCriteria<Foo>()
.Add(Restrictions.Eq(
Projections.SqlFunction("date",
NHibernateUtil.Date,
Projections.Property("MyDate")),
day.Date))
.List<MyClass>(); //executes
Run Code Online (Sandbox Code Playgroud)