【发布时间】:2013-07-11 23:20:44
【问题描述】:
使用 LINQ-to-NHibernate 有没有办法缩小 FetchMany() 返回的范围?
给定以下类结构
public class Foo
{
public virtual int Id { get; set; }
public virtual IList<Bar> Bars { get; set; }
}
public class Bar
{
public virtual string Description { get; set; }
}
我该怎么做:
session.Query<Foo>()
.Where(foo => foo.Id > 30)
.FetchMany(foo =>
foo.Bars.Where(bar => bar.Description.StartsWith("x")));
NHibernate 将返回所有 Id > 30 的 Foo 以及对于那些 Foo 的所有附加 Bar,其中 Bar 的描述以字母 'x' 开头?
我发现一些帖子使用旧的 QueryOver() 东西,但我明确地想使用 NHibernate 的 LINQ 提供程序。
有什么想法吗?
更新
我认为我需要澄清我想要的结果。
<Foo Id="1">
<Bar Description="x1"/>
<Bar Description="b1"/>
</Foo>
<Foo Id="31">
<Bar Description="x2"/>
<Bar Description="x3"/>
<Bar Description="b2"/>
</Foo>
<Foo Id="32">
<Bar Description="b3"/>
</Foo>
根据上述数据,我预计会有以下结果
<Foo Id="31">
<Bar Description="x2"/>
<Bar Description="x3"/>
</Foo>
<Foo Id="32"/>
附加的 Where 子句应该只对 Bar 有效!它不应该进一步缩小 Foo 的列表!只需减少 FetchMany() 返回的内容即可。
【问题讨论】:
-
现在返回什么?
-
@GertArnold 现在该查询甚至无法编译...如果我删除第二个 Where 子句,它将返回所有 Id > 30 的 Foo 以及每个附加到它们的所有条。我找不到对“FetchMany()”调用将返回的内容进行任何过滤的方法。
-
@SebastianWeber 你找到解决方案了吗?
-
@SarabjeetSingh 对不起,我真的不记得了。 DanP 提到的过滤器的想法听起来有点熟悉,但我不确定我们是否真的使用了那个。
-
@SarabjeetSingh 刚刚偶然发现了release notes for EFCore 5.0,他们在其中添加了对该功能的支持
标签: linq nhibernate linq-to-nhibernate