私は非常に簡単な質問がありますが、簡単な答えは見つかりません。シングルカラムのNHibernate SQLクエリマッピング結果:
残念なことにDBからロードされた生のSQLクエリを実行するNHibernateを持っています(はい、私はDBにSQLクエリを格納しますが、最高のデザインではありませんが、私には負担してください)。つまり、基本的にクエリが返す列の数はわかりません。 私が知っているのは、クエリが単一の列であれば、それは必要なものであり、それが複数の列であれば、最初の列が必要なだけで十分です。私のコードで
私は基本的に3つのオプションがあります。
session.CreateSQLQuery(SQLString).List();
session.CreateSQLQuery(SQLString).List<object>();
session.CreateSQLQuery(SQLString).List<object[]>();
問題は、リストは()のいずれかを返すということですList<int>
(または適切な型が、int型は、私の場合でなければなりません)クエリが返す場合単一の列、または複数の列を持つ場合はList<object[]>()
です。この場合はList<int>
が返されない点を除いて、List<object>
の場合も同じです。 もちろん、常にオブジェクト[](第3オプション)にキャストして最初の要素を取得しようとしないと、nHibernateがintを返し、オブジェクト[]にキャストできないため動作しません。
単一の列の場合でも常にnHibernateがオブジェクト[]を返すように強制する方法はありますか?そうでない場合は、結果の列の数を確認してそれに応じて簡単に方法がありますか?
ありがとうございます!
おそらく、NHibernateのDTOがあなたのニーズを満たすことになります。リストを除き
あなたのクエリが返すものがわからない場合は、どのように結果をどうするかを知っていますか、結果の形状によって決定しますか? –
私はint(IDは基本的に)のリストが必要であることを知っています。クエリが1列を返す場合は必要なものになりますが、複数の列が返された場合は最初の列が必要になります。私はその後、このIDのリストを処理するために渡します... クエリは他のプロセスによって動的に生成されるため、結果のタイプはわかりません(基本的には動的フィルタリングの一種です)。 – Tallmaris