我有以下NHibernate Linq查询:
From eachLine In myNhSession.Query(Of SamplePoco)()
Where eachLine.SampleIntField = 1234
属性SamplePoco.SampleIntField
的类型为Nullable(Of Int32)
当我运行查询时,我得到以下异常:
System.InvalidCastException: Unable to cast object of type 'NHibernate.Hql.Ast.HqlCoalesce' to type 'NHibernate.Hql.Ast.HqlBooleanExpression'
如果我将属性类型更改为Int32
,则可以正常工作。似乎Nullable类型由Linq编译器自动转换为合并表达式。
调试NHibernate,我发现这个Where子句被转换为:{where ((eachLine.SampleIntField == 1234) ?? False)}
。据我所知,整个条件比较被转换为合并而不仅仅是Nullable属性。
如果我这样说eachLine.SampleIntField.Equals(1234)
它也不行('等于未实现'例外)
如果我将查询更改为以下代码,则可以:
From eachLine In myNhSession(Of SamplePoco)()
Where {1234}.Contains(eachLine.SampleIntField)
(不优雅)
另一个也能正常工作的代码(正如第一个查询所期望的那样正确地合并字段):
From eachLine In myNhSession(Of SamplePoco)()
Where If(eachLine.SampleIntField,0) = 1234
有什么建议可以保持简单吗?
答案 0 :(得分:0)
我认为NHibernate处理的最明确的方法是:
From eachLine In myNhSession.Query(Of SamplePoco)()
Where eachLine.SampleIntField.HasValue AndAlso eachLine.SampleIntField.Value = 1234