1

これまで (NHibernate を使用して) エンティティ マッピングを使用してきましたが、生の SQL クエリの作成にはあまり関与していませんでしたが、まさにそれを行う必要がある場所で何かが発生しました。

私が抱えている問題は、クエリの列エイリアスを Dto オブジェクトに自動的にマップしたいということです。

これは機能しますが、クエリの順序で列エイリアスを指定する必要があります。

SQL

string sql = "select mycol1 as ColumnOne from mytable";

Hibernate クエリ

var query = session.CreateSQLQuery(sql)
            .AddScalar("ColumnOne", NHibernateUtil.Int32)
            .SetResultTransformer(
                  NHibernate.Transform.Transformers.AliasToBean<MyDtoObject>()
            );

MyDtoObject

 public class MyDtoObject 
 {
     public int ColumnOne {get;set;}
 }

しかし、マッピング クラスを作成せずに、クエリ内の列と Dto の間のマッピングを NHibernate に自動化させる方法はありますか?

クエリでエイリアスを使用する例をいくつか見ました。

string sql = "select mycol1 as {ColumnOne} as ColumnOne from mytable"; /// ???

ただし、エイリアス {ColumnOne} は、SQL ステートメントとしてデータベースに送信される前に置き換えられないように見えるため、これを機能させることはできません。

何か案が?

ティア

サム

4

1 に答える 1

0

おそらく System.Linq.Dymanic が役立ちます:

use System.Linq.Dynamic;

string ColumnAlisName = "ColumnOne";
var query = mytable.Select(String.Format("new (mycol1 as {0})",ColumnAlisName)); 
于 2012-06-19T12:25:25.417 に答える