J'essaie de filtrer par une liste de valeurs en utilisant l'API de critères. Je soupçonne que ce n'est pas possible, je demande juste d'être sûr.NHibernate: Filtrage des requêtes sur une liste de valeurs en utilisant les critères
class Entity
{
int id { get; set; }
IList<Guid> Guids { get; set; }
}
La mise en correspondance:
<class name="Entity">
<id ...></id>
<bag name="Guids" table="Entity_Guids">
<key column="Entity_FK"/>
<element column="Guid"/>
</bag>
</class>
J'ai présumé liste des Guids (en fait ceux-ci est un autre sous-requête). Je veux filtrer toutes les Entités où au moins un guid est dans la liste des Guids.
Sql ressemblerait à ceci:
SELECT *
FROM Entity e
inner join Entity_Guids eg
on e.id = eg.Entity_FK
WHERE
eg.Guid in (subquery)
Avec API critères, cela semble être impossible.
ICriteria query = session
.CreateCriteria(typeof(Entity), "e")
.Add(Subqueries.In("e.Guids", subquery))
Lève une exception.
l'exception? – MatthieuGD
et la sous-requête est un critère détaché? – MatthieuGD
Oui, la sous-requête est un DetachedCriteria. L'exception est que l'argument 'clé' ne doit pas être nul. Il semble être une exception lors de l'accès à un dictionnaire et ne signifie pas beaucoup. –