在LINQ中加入nhibernate查询

时间:2013-07-25 20:29:50

标签: c# linq nhibernate

我正在尝试加入两个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)

如何构建语句,以便查询在加入之前不会获得所有用户和用户权限?

1 个答案:

答案 0 :(得分:3)

如果您想linq使用nhibernate,则必须使用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。使用这样的方法,您将点击您需要的查询数据库。