Ordinato per Aggregate sottoquery con NHibernate ICriteria o QueryOver
-
16-10-2019 - |
Domanda
C'è un modo per ottenere SQL come questo con NHibernate ICriteria o QueryOver?
select *
from [BlogPost] b
inner join (select blogpost_id, count(*) matchCount
from [Tag]
where name in ('tag X', 'tag Y')
group by blogpost_id
) tagmatch
on tagmatch.blogpost_id = b.Id
order by tagmatch.matchCount desc
L'obiettivo è quello messaggi rango del blog per il numero di tag corrispondenti in modo che un post sia con tag X e tag Y viene sopra Post con tag solo X .
Ho questo finora:
DetachedCriteria
.For<Tag>("tag")
.Add(Restrictions.In(Projections.Property<Tag>(x => x.Name), tags.ToArray()))
.SetProjection(Projections.Group<Tag>(t => t.BlogPost))
.CreateCriteria("BlogPost")
.SetFetchMode("BlogPost", FetchMode.Eager)
.AddOrder(Order.Desc(Projections.RowCount()));
Tuttavia, la query risultante non unirsi a prendere BlogPost
. Invece restituisce solo gli ID, che porta a selezionare n + 1 quando i BlogPost
s sono iterate.
public class BlogPost
{
...
ISet<Tag> Tags {get; set;}
}
public class Tag
{
BlogPost BlogPost { get; set; }
string Name { get; set; }
}
questo sembra un problema simile.
Questo è ora possibile con NHibernate 3?
In caso contrario, c'è una soluzione alternativa?
posso cambiare schema e modello di dominio, se necessario. Non voglio utilizzare SQL o HQL, se possibile.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow