Criteri di NHibernate per eseguire query sugli oggetti parent con almeno un oggetto child?
-
05-07-2019 - |
Domanda
Nel mio progetto, Lines
può essere raggruppato e un Group
ha un tipo che può essere Crossing
(1) o Parallelo
(2). Devo trovare tutte le righe che hanno almeno un gruppo di un tipo specificato (in questo caso, 1). L'ID di una determinata riga può essere sulla colonna LineA
o LineB
di un gruppo. Ecco dove sono arrivato finora:
Criteria crit = session.CreateCriteria(typeof(Line), "ln");
DetachedCriteria count = DetachedCriteria.For<Group>()
.SetProjection(Projections.CountDistinct("Id"))
.Add(Expression.Or(
Expression.EqProperty("LineA", "ln.Id"),
Expression.EqProperty("LineB", "ln.Id")))
.Add(Expression.Eq("GroupTypeId", 1));
crit.Add(Subqueries.Gt(0, count));
Soluzione
L'ho fatto funzionare!
crit.Add(Expression.Sql(
"EXISTS(select 1 from Group" +
"WHERE ({alias}.Id=LineA OR {alias}.Id=LineB)"+
"AND GroupTypeId = ?)", (int) type, NHibernateUtil.Int32));
{alias}
è un segnaposto per l'oggetto da interrogare.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow