带有详细信息限制的Linq查询的即时加载
如何使用NHibernate的内置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
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。在这种情况下,由于您已经返回过滤数据,您不能返回列表吗?作为一种解决方法,这就足够了。但是我们正在为几个应用程序开发一个框架。所以这不是我真正想要的。