我的数据库结构中有以下层次结构 -
一个 JobOrder 有多个模板
一个模板有多个群组
一个群组有多个项
一个商品有一个状态,一个状态有一个商品(一对一)
我已经将这些表映射到我在NHibernate中的模型,它也正常工作。 这种一对一关系已经这样映射 -
Item.hbm.xml:
<one-to-one name="Status" class="ItemStatus"></one-to-one>
Status.hbm.xml:
<id name="Id" column="Id" type="long">
<generator class="foreign" >
<param name="property">Item</param>
</generator>
</id>
<one-to-one name="Item" class="ItemInGroup" constrained="true"></one-to-one>
我想写一个nhibernate QueryOver,它会返回所有在其层次结构中至少有一个状态为null的作业的命令。
我尝试写下以下内容 -
var jobOrders =
Repository.QueryOver<Models.JobOrder>().Where(
jo => jo.Templates.Any(t => t.Groups.Any(g => g.Items.Any(i => i.Status==
null)))).List();
但它抛出异常 -
无法识别的方法调用:System.Linq.Enumerable:Boolean任何[TSource](System.Collections.Generic.IEnumerable
1[TSource], System.Func
2 [TSource,System.Boolean])
我该怎么写?
答案 0 :(得分:0)
您需要使用JoinQueryOver
或JoinAlias
这样的事情应该有效(没有经过测试,但你应该明白这一点):
var jobOrders = Repository
.QueryOver<Models.JobOrder>()
.JoinQueryOver<Models.Template>(j => j.Templates)
.JoinQueryOver<Models.Group>(t => t.Groups)
.JoinQueryOver<Models.Item>(g => g.Items)
.Where(i => i.Status == null)
.List<Models.JobOrder>();