0

我正在尝试加入两个休眠查询的结果。我在这里面临的问题是,它首先获取两个查询的所有行,然后执行 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

如果你想linqnhibernate你一起使用,就必须session.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 回答