我正在使用NHibernate
驱动的存储库,Fluent
映射并尝试使用Linq to NHibernate
。
但对于像这样的简单查询
Retrieve<XValue>(x => (x.Timestamp.CompareTo(start) >= 0 &&
x.Timestamp.CompareTo(end) <= 0 ));
// 'Retrieve' here acts simply as 'session.Query<T>().Where(expression);'
我得到以下结果:
System.NotSupportedException: Int32 CompareTo(System.DateTime)
我不知道为什么,但是CompareTo
操作没有投射到数据库,输出也有点奇怪:
create table "QuotUnitDescriptor" (
Id integer,
PaperId INTEGER,
Timestamp DATETIME,
InPaperIdx INTEGER,
primary key (Id)
)
NHibernate: INSERT INTO "QuotUnitDescriptor" ......................
// Many INSERT's
NHibernate: select cast(count(*) as INTEGER) as col_0_0_
from "QuotUnitDescriptor" binaryunit0_
我无法理解为什么此操作会调用select -> integer
操作。
如何实现以下面向日期的查询? (使用Linq
更好,但我认为标准也很好。)
答案 0 :(得分:5)
NHibernate.Linq提供程序无法将CompareTo
调用转换为sql。
使用类似:
Retrieve<XValue>(x => x.Timestamp>start && x.Timestamp<end);
P.S。并避免存储库。这是一个天真的抽象。