C# 在LINQ中加入nhibertnate查询

C# 在LINQ中加入nhibertnate查询,c#,linq,nhibernate,C#,Linq,Nhibernate,我正在尝试合并两个nhibernate查询的结果。我在这里面临的问题是,它首先获取两个查询的所有行,然后执行where,这大大降低了速度。发生这种情况是因为我正在执行列表()。但如果没有它,就无法加入 var results= from u in session.QueryOver<User>().List() join ur in session.QueryOver<UserRights>().List()

我正在尝试合并两个nhibernate查询的结果。我在这里面临的问题是,它首先获取两个查询的所有行,然后执行where,这大大降低了速度。发生这种情况是因为我正在执行列表()。但如果没有它,就无法加入

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)
var results=来自session.QueryOver().List()中的u
在session.QueryOver().List()中加入您
on u.Id等于ur.User.Id
其中u.Deleted==false&(ur.Role.Id==10 | | ur.Role.Id==20)

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

如果要将
linq
nhibernate
一起使用,则必须使用
会话。query
而不是
session.QueryOver
。试试这个:

// 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();
//准备查询
var query=来自会话中的u.query()
在会话中加入ur。u.Id上的Query()等于ur.User.Id
其中u.Deleted==false&(ur.Role.Id==10 | | ur.Role.Id==20)
选择u;
//执行查询并获取列表
var results=query.ToList();

另外,避免使用
.ToList()
创建查询,因为它将加载内存中的所有实体(执行完整查询)并在内存中执行Linq to对象。这样使用,您将在需要的地方点击查询数据库。

如果您想将
linq
nhibernate
一起使用,您必须使用
会话。query
而不是
会话。QueryOver
。试试这个:

// 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();
//准备查询
var query=来自会话中的u.query()
在会话中加入ur。u.Id上的Query()等于ur.User.Id
其中u.Deleted==false&(ur.Role.Id==10 | | ur.Role.Id==20)
选择u;
//执行查询并获取列表
var results=query.ToList();
另外,避免使用
.ToList()
创建查询,因为它将加载内存中的所有实体(执行完整查询)并在内存中执行Linq to对象。这样使用,您将在需要的地方访问查询数据库