0

2 つの nhibernate クエリの結果を結合しようとしています。ここで私が直面している問題は、最初に両方のクエリのすべての行を取得してから where を実行することです。これにより、処理が大幅に遅くなります。これは、List() を行っているために発生しています。しかし、それがなければ、結合を行うことはできません。

var results=  from u in session.QueryOver<User>().List()
                        join ur in session.QueryOver<UserRights>().List()
                            on u.Id equals ur.User.Id
                        where u.Deleted == false && (ur.Role.Id == 10 || ur.Role.Id == 20)

結合の前にクエリがすべてのユーザーとユーザー権限を取得しないようにステートメントを作成するにはどうすればよいですか?

4

1 に答える 1

3

で使用する場合は、代わりに を使用linqする必要があります。これを試して:nhibernatesession.Query<T>session.QueryOver<T>

// prepare the query
var query = from u in session.Query<User>()
            join ur in session.Query<UserRights>() on u.Id equals ur.User.Id
            where u.Deleted == false && (ur.Role.Id == 10 || ur.Role.Id == 20)
            select u;

// execute query and get list
var results = query.ToList();

また、.ToList()メモリ内のすべてのエンティティをロードし (完全なクエリを実行)、メモリ内で Linq To Object を実行するため、クエリの作成に使用しないでください。このように使用すると、必要な場所にクエリ データベースがヒットします。

于 2013-07-25T20:34:14.397 に答える