我遇到了我需要写的查询。
鉴于以下模型:
public class A : Entity<Guid>
{
public virtual IDictionary<B, C> C { get; set; }
}
public class B : Entity<Guid>
{
}
public class C : Entity<Guid>
{
public virtual int Data1 { get; set; }
public virtual ICollection<D> D { get; set; }
}
public class D : Entity<Guid>
{
public virtual int Data2 { get; set; }
}
我需要获取A
个实例的列表,其中D
包含指定B
(参数)的某些数据
在对象模型中,那将是:
listOfA.Where(a => a.C[b].D.Any(d => d.Data2 == 0))
但是我无法编写有效的HQL。
我能够编写如下内容,它们在C.Data1:
上进行过滤from A a
where a.C[:b].Data1 = 0
但我无法对a.C [:b] .D的元素做任何事情(我得到各种解析异常)
以下是映射,以防您感兴趣(没有什么特别的,由ConfORM生成):
<class name="A">
<id name="Id" type="Guid">
<generator class="guid.comb" />
</id>
<map name="C">
<key column="a_key" />
<map-key-many-to-many class="B" />
<one-to-many class="C" />
</map>
</class>
<class name="B">
<id name="Id" type="Guid">
<generator class="guid.comb" />
</id>
</class>
<class name="C">
<id name="Id" type="Guid">
<generator class="guid.comb" />
</id>
<property name="Data1" />
<bag name="D">
<key column="c_key" />
<one-to-many class="D" />
</bag>
</class>
<class name="D">
<id name="Id" type="Guid">
<generator class="guid.comb" />
</id>
<property name="Data2" />
</class>
谢谢!
答案 0 :(得分:0)
好吧,看起来我只需要更加努力: - )
我建立了B
和C
双向关系,所以我可以编写以下HQL:
from A a, D d
where a.C[:b] = d.C
and d.Data2 = 0