2011-01-04 9 views
4

abrufen Ich versuche, eine Gruppe von Linq Abfrage mit NH3 durchzuführen. Ich kenne die unterschwelligen SQL-Schwierigkeiten. Ich weiß, dass es nicht möglich ist, aber im Idealfall würde ich die Gruppe gerne durch eine Entität machen und sie in ihrer Gesamtheit abrufen lassen. Etwas wie:Kann nicht Gruppen von Entitäten oder durch zusammengesetzte Schlüssel mit Nhibernate Linq

var list = from proposals in Session.Query<Proposal>() 
      group proposals by proposals.Job 
      into jobGrouping 
      select new { 
       Job = jobGrouping.Key, 
       TotalProposals = jobGrouping.Count() 
      }; 

Dies erzeugt eine illegale SQL-Abfrage, da sie die ganze Arbeit Einheit, sondern Gruppe durch seine Id nur abzurufen versucht.

Ich habe versucht, durch ein zusammengesetztes Feld Gruppierung:

var list = from proposals in Session.Query<Proposal>() 
        group proposals by new { proposals.Job.Name, proposals.Job.Status} 
        into jobGrouping 
        select new { 
         Job = jobGrouping.Key.Name, 
         Status = jobGrouping.Key.Status, 
         TotalProposals = jobGrouping.Count() 
        }; 

Aber immer, wenn ich versuche, diese erhalte ich eine Ausnahme, wenn NHibernate tryes einen Ausdruck Baum zu bauen:

Ein Element mit dem gleichen Schlüssel wurde bereits hinzugefügt.

Wer weiß, ob es eine Möglichkeit gibt, dies mit NHibernate zu erreichen?

Danke, Ilan

+0

+1 Ich habe das gleiche Problem –

+1

https://nhibernate.jira.com/browse/NH-3027 ist relevant für Ihr (erstes) Problem - es bleibt ab NH 3.2 ungelöst –

Antwort

0

Ich hatte ein ähnliches Problem versucht die .join Erweiterung Methode mehrfach zu verwenden, wo der Ausdruck Baum alias direkt aus dem Lambda-Parameter-Namen genommen wurde.

Mein Wissen über die SQL Wie Linq-Syntax ist begrenzt, aber ich würde annehmen, dass es irgendwie in die fließende Entsprechung übersetzt, wo die Lambda-Aliasnamen automatisch zugewiesen werden.

Wenn das der Fall ist, ist es möglich, dass dies auf die fließend Syntax mit expliziten einzigartigen labmda Aliase übersetzen Sie das Problem vermeiden konnte