我正在尝试使用针对DateTime的where子句检索行。
注意:Query
是来自IQueryable
扩展程序的ISession.Query
。
var results = Query
.Where(row => row.TimeStampUtc == timeStampUtc);
这不会返回任何结果。
var results = Query.ToList()
.Where(row => row.TimeStampUtc == timeStampUtc);
返回结果。(通过使用ToList()im避免使用NHibernate查询提供程序。)
我错过了哪些技巧?
更新
SQL profiler告诉我它查询
where row.TimeStampUtc = '2011-01-28T09:28:55.00' /* @p0 */
但实际列值为'2011-01-28 09:28:55.987'
因此没有匹配。
在映射期间(可能是读取)我丢失了亚秒数据。
答案 0 :(得分:0)
问题是由于该列被用作CompositeId
的一部分而引起的。
我无法单独在列上使用CustomType
,因为如果列也被定义为CompositeId
的一部分,则会忽略它。
解决方案是在Type
定义上使用KeyProperty
方法。
mapping.CompositeId()
.KeyProperty(x => x.Name)
.KeyProperty(x => x.TimeStampUtc, k => k.Type("DateTime2"));