Domanda

Sto provando fine di una query LINQ to NHibernate dalla somma del suo i bambini.

session.Linq<Parent>().OrderBy( p => p.Children.Sum( c => c.SomeNumber ) ).ToList()

Questo non sembra funzionare. Se si guarda a NHProf, posso vedere che sta ordinando da Parent.Id. Ho pensato che forse stava tornando la risultati e ordinando loro di fuori di SQL, ma se aggiungo un .Skip (1) .Prendere (1) alla query LINQ, ancora ordini da parte Parent.Id.

Ho provato a fare questo con un a lista di memoria e funziona solo multa.

Sto facendo qualcosa di sbagliato, o si tratta di un problema con LINQ to NHibernate?

Sono sicuro che potrei sempre tornare alla lista, quindi effettuare le operazioni su loro, ma che non è una soluzione ideale, perché non voglio restituire tutti i record.

È stato utile?

Soluzione

Per ordinare una query da un valore aggregato, è necessario utilizzare un gruppo di query. Nel tuo esempio è necessario utilizzare un 'gruppo da' con un join.

Lo SQL equivelant sarebbe qualcosa di simile:

select id, sum(child.parentid) as childsum from dbo.Parent
inner join child on
parent.id= child.parentid 
group by id
order by childsum desc

Se solo Linq2NH poteva fare questo per noi ... ma non può purtroppo. È possibile farlo in HQL finché stai bene con ottenere l'id, e la somma di nuovo, ma non l'intero oggetto.

ho lottato con Linq2NH per mesi prima ho abbandonata. Il suo lento, non supporta cache di 2 ° livello e supporta solo le query molto di base. (Almeno quando ho abbandonata 6 mesi fa - può provenire lungo passi da gigante!) Il suo bene se si sta facendo una semplice applicazione fatta in casa. Se l'applicazione è anche lontanamente complessa fosso e passare un po 'di tempo per conoscere HQL: un po' più difficile da capire, ma molto più potente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top