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)