Je suis coincé avec une requête que j'ai besoin d'écrire.HQL sur carte ternaire avec sous-collection
Compte tenu du modèle suivant:
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; }
}
je dois obtenir une liste des A
instances qui ont un D
contenant des données pour spécifié B
(paramètre)
Dans le modèle d'objet, qui serait être:
listOfA.Where(a => a.C[b].D.Any(d => d.Data2 == 0))
Mais je n'étais pas capable d'écrire un HQL qui fonctionne.
Je suis capable d'écrire quelque chose comme ce qui suit, qui filtre le C.Data1:
from A a
where a.C[:b].Data1 = 0
Mais je suis incapable de faire quoi que ce soit avec les éléments de aC [: b] .D (I obtenir diverses exceptions d'analyse syntaxique)
Voici les correspondances, au cas où vous êtes intéressé (rien de spécial, généré par Comforme):
<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>
Merci!