Bestellung nach aggregierter Unterabfrage mit Nhibernate Icriiteria oder Abfragel
-
16-10-2019 - |
Frage
Gibt es eine Möglichkeit, SQL mit Nhibernate Icriiteria oder Abfragebericht über so zu erreichen?
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
Ziel ist es, Blog -Beiträge nach der Anzahl der passenden Tags zu bewerten, damit ein Beitrag mit beiden Tag x und Tag y Kommt über Beiträge mit nur Tag x.
Ich habe das bisher:
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()));
Die resultierende Abfrage beiträgt jedoch nicht mit Fetch bei BlogPost
. Stattdessen gibt es nur die IDs zurück, was dazu führt, dass N+1 ausgewählt wird, wenn die BlogPost
s werden iteriert.
public class BlogPost
{
...
ISet<Tag> Tags {get; set;}
}
public class Tag
{
BlogPost BlogPost { get; set; }
string Name { get; set; }
}
Dies sieht nach einem ähnlichen Problem aus.
Ist das jetzt mit Nhibernate 3 möglich?
Wenn nicht, gibt es eine alternative Lösung?
Ich kann das Schema und Domänenmodell bei Bedarf ändern. Ich möchte SQL oder HQL, wenn möglich, nicht verwenden.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow