私は、次のNHibernateはLINQクエリを持ってどこで:NHibernate.Linq - エラー照会するときのNullable型の句
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
にプロパティの種類を変更した場合、それはWOR ks。 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
それを簡単にするための提案はありますか?
は、 'していますか?あなたは条件を組み合わせることができます。もちろん、これは自動化された感覚ではありません。 –
はい、そうです。興味深いことに、C#の同等のLinqクエリはうまく動作します(私は質問を投稿した直後にテストを行っています)。 VB.NETのC#に対するファンとして、私は今かなり失望しています。( –
これはいいです!(C#addict) –