2017-10-11 6 views
1

私はDToクラスUserDTOを次のコンストラクタpublic UserDTO(User user)と一緒に使用しています。また、IList<TodoDTO>を取得するNHibernateクエリを作成しました。各TodoDTOのプロパティはpublic IList<UserDTO> ResponsibleUsers { get; set; }です。NHibernate QueryOverからオブジェクトコンストラクタを呼び出すSelectList

var responsibleUsers = session.QueryOver<UserTodo>() 
    .JoinAlias(ut => ut.User,() => userAlias) 
    .Where(ut => ut.Todo.Id.IsIn(_todos.Select(t => t.Id).ToArray())) 
    .Select(u => new UserDTO(userAlias)).ToList<UserDTO>(); 

コンストラクタは次のようになります:それは私のクエリでUserDTOにこのコンストラクタに可能であるかどう 私は、このようなので、何かを疑問に思って
public UserDTO(User user) {}

問題は、私が実行したときにということですこのコードはUserDTOコンストラクタのパラメータuserはnullです。

+0

このコードを実行するとどうなりますか? –

+0

これは実際に実行されるコードではありません。このコードは、私がやりたいことの例を示すためのものです。 – Bunnynut

+0

@ChetanRanpariyaいくつか追加しました。 – Bunnynut

答えて

1

クエリの構文でコンストラクタ(または他のコード)を呼び出すことはできません。ここのエンティティは、SQLクエリのテーブルとカラムを解決するためにのみ使用されます。これらのオブジェクトのメソッドを呼び出す機能missleadingさ...

あなたは(あなたの場合:UserDTOに)新しいオブジェクトに1、または複数のDB-エンティティからデータを選択するために、投影を使用することができます

UserTodo userTodo = null 
UserDTO result = null; 
var responsibleUsers = session.QueryOver<UserTodo>(() => userTodo) 
.JoinAlias(ut => ut.User,() => userAlias) 
.Where(ut => ut.Todo.Id.IsIn(_todos.Select(t => t.Id).ToArray())) 
.SelectList(list => list 
    .Select(() => userAlias.FirstName).WithAlias(() => result.FirstName) 
    .Select(() => userAlias.UserId).WithAlias(() => result.IdOfUser) 
    .Select(() => userTodo.Age).WithAlias(() => result.Age) // if you require any values from UserTodo 
) 
.TransformUsing(Transformers.AliasToBean<UserDTO >()) 
.List<UserDTO >(); 
関連する問題