带有详细信息限制的Linq查询的即时加载

带有详细信息限制的Linq查询的即时加载,linq,nhibernate,eager-loading,Linq,Nhibernate,Eager Loading,如何使用NHibernate的内置linq提供程序编写查询,包括即时加载和对细节的限制?比如说 public class Library { public Library() { Books = new List<Book>(); } public virtual int Id { get; set; } public virtual string Name { get; set

如何使用NHibernate的内置linq提供程序编写查询,包括即时加载和对细节的限制?比如说

    public class Library
    {
       public Library()
       {
         Books = new List<Book>();
       }

       public virtual int Id { get; set; }
       public virtual string Name { get; set; }
       public virtual IList<Book> Books { get; protected internal set; }
    }

    public class Book
    {
       public Book()
       {
          Pages = new List<Page>();
       }

       public virtual int Id { get; set; }
       public virtual Library Library { get; set; }
       public virtual string Title { get; set; }
    }
公共类库
{
公共图书馆()
{
书籍=新列表();
}
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟IList书籍{get;受保护的内部集;}
}
公共课堂用书
{
公共书籍()
{
Pages=新列表();
}
公共虚拟整数Id{get;set;}
公共虚拟库{get;set;}
公共虚拟字符串标题{get;set;}
}
下面的查询显示了我需要的内容,但并不急于加载

    var query = from master in session.Query<Library>()
                from detail in master.Books
                where detail.Title == detailValue
                select master;
var query=来自会话中的主机。query()
从大师书中的细节开始
其中detail.Title==detailValue
选择主机;
以下查询不起作用

    var query = from master in session.Query<Library>()
                // not allowed - causes Runtime error
                .FetchMany(m => m.Details.Where(d => d.Value == detailValue))
                select master;
var query=来自会话中的主机。query()
//不允许-导致运行时错误
.FetchMany(m=>m.Details.Where(d=>d.Value==detailValue))
选择主机;
先谢谢你


<> P> > CARSTEN

< P>您可以考虑使用查询代替:-< /P>
Book book = null;

var query =
  Session.QueryOver<Library>()
  .Fetch(f => f.Books).Eager
  .Left.JoinAlias(f => f.Books, () => book)
  .Where(() => actor.book == detailValue);
Book Book=null;
变量查询=
Session.QueryOver()
.Fetch(f=>f.Books)。渴望
.Left.JoinAlias(f=>f.Books,()=>book)
.其中(()=>actor.book==detailValue);
我可能错了,但我认为NH LINQ提供商目前无法支持这一点


另外请注意
。左
这一点很重要,请参阅此博客帖子以了解

谢谢!我想使用linq,因为我们将linq查询从客户端传输到服务器。在客户端,我不想依赖NHibernate。在这种情况下,由于您已经返回过滤数据,您不能返回列表吗?作为一种解决方法,这就足够了。但是我们正在为几个应用程序开发一个框架。所以这不是我真正想要的。