Fluent nhibernate Nhibernate Linq-fetchmany其中many count==0
我有一个疑问:Fluent nhibernate Nhibernate Linq-fetchmany其中many count==0,fluent-nhibernate,has-many,take,Fluent Nhibernate,Has Many,Take,我有一个疑问: var query = session.Query<Album>() .FetchMany(x => x.Tracks) .ThenFetchMany(x => x.Indices) .Where(t => t.Tracks.Any(v => v.Indices.Count == 0))
var query = session.Query<Album>()
.FetchMany(x => x.Tracks)
.ThenFetchMany(x => x.Indices)
.Where(t => t.Tracks.Any(v => v.Indices.Count == 0))
.Take(20)
.ToList();
var query=session.query()
.FetchMany(x=>x.Tracks)
.ThenFetchMany(x=>x.index)
.其中(t=>t.Tracks.Any(v=>v.index.Count==0))
.Take(20)
.ToList();
专辑
有列表
曲目
(有很多)。
曲目
有列表
索引
(有很多)
我得到的不是20行,而是2行。当我在探查器中看到结果时,看起来
Take
指的是曲目
,而不是专辑
有什么想法吗? 谢谢你,林
var filtered =
from a in session.Query<Album>()
from t in a.Tracks
where !t.Indices.Any()
select a.Id
var results = session.Query<Album>()
.Where(a => filtered.Contains(a.Id))
.Take(20)
.List()
var过滤=
从会话中的
从a.Tracks的t开始
哪里t、 任何()
选择a.Id
var results=session.Query()
.Where(a=>filtered.Contains(a.Id))
.Take(20)
.List()
询问者
var results = session.QueryOver<Album>()
.WhereRestrictionOn(a => a.Id).IsIn(QueryOver.Of<Album>()
.JoinQueryOver(a => a.Tracks)
.Where(t => !t.Indices.Any())
.Select(a => a.Id))
.Take(20)
.List()
var results=session.QueryOver()
.WhereRestrictionOn(a=>a.Id).IsIn(QueryOver.Of())
.JoinQueryOver(a=>a.Tracks)
.Where(t=>!t.index.Any())
.选择(a=>a.Id))
.Take(20)
.List()
我不是NHibernate的资深专家,但我知道有另一种查询NHibernate的方法也可以帮助您。它被称为QueryOver
。它是使用类似Linq的成员表达式的强类型查询语法。现在,QueryOver
在NHibernate社区中更加健壮,主要是因为它基于标准查询(已经存在了相当长的一段时间)
如果您有兴趣了解有关不同查询语言的更多信息,请访问以下网站:
我也有一个博客,在那里我有一篇关于不同插件和技术的文章,你可以使用NHibernate(包括查询方式)——
下面应该是您可能正在寻找的使用queryover的详细说明
Album a = null;
Tracks t = null;
Indices i = null;
var query = session.GetQueryOver(() => a)
.JoinAlias(() => a.Tracks, () => t)
.JoinAlias(() => t.Indicies, () => i)
.Where(() => i.Indices.Count() == 0)
.Take(20)
.ToList()
;
向查询添加联接时,还可以通过向方法调用添加另一个类型为JoinType
的参数来指定联接类型。
例:
此queryover查询确实遇到与OP描述的问题相同的问题。Take将应用于加入,不返回20个相册,而是返回20个加入行。
.JoinAlias(() => a.Tracks, () => t, JoinType.LeftOuterJoin)