【问题标题】:Joining nhibertnate query in LINQ在 LINQ 中加入休眠查询
【发布时间】:2013-07-26 04:34:14
【问题描述】:

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

如何构建语句,使查询在加入前不获取所有用户和用户权限以及在哪里?

【问题讨论】:

    标签: c# linq nhibernate


    【解决方案1】:

    如果您想将linqnhibernate 一起使用,则必须使用session.Query&lt;T&gt; 而不是session.QueryOver&lt;T&gt;。试试这个:

    // 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。像这样使用,你会在你需要的地方找到一个查询数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      相关资源
      最近更新 更多