結果トランスフォーマーが使用されない限り、射影は射影された値を持つ匿名オブジェクトのリストになります。データバインディングにはこれで十分です。
他の用途では、既知のタイプのオブジェクトを作成する結果トランスフォーマーを設定する必要があります。はAliasToBeanTransformer
、行ごとに指定されたタイプのオブジェクトを作成し、そのプロパティを行の値に設定します。
結果のタイプがわかっている場合は、ジェネリックList<T>()
メソッドを使用できます。
var proj = Projections.ProjectionList()
.Add(Projections.Property("Id"), "Id")
.Add(Projections.Property("Username"), "Username");
var list2 = DetachedCriteria.For<User>()
.Add(Expression.Eq("Username", "lachlan"))
.GetExecutableCriteria( sessionFactory.GetCurrentSession())
.SetProjection( proj )
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
結果トランスフォーマーは、SQLおよびHQLクエリでも使用できます。
list2 = Session.CreateSQLQuery("select Id, Username from user_table")
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
list2 = Session.CreateQuery("select Id, Username from User")
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
これらの例では、Resultクラスはマップされたクラスである必要はなく、選択されたプロパティを持っている必要があります。
partial class Result
{
public int Id { get; set; }
public string Username { get; set; }
}