2011-01-04 8 views
1

Hallo, ich benutze NHiberante, um das seitenweise und geordnete Raster meiner Web-App zu füllen. Es funktionierte gut, bis ich beschloss, die Projektion in Aktion zu setzen.NHibernate 3.0 Linq Provider. Auswahl funktioniert nicht nach Überspringen und Anfang

Dies ist die ursprüngliche, Arbeitscode:

var data = repository 
    .Where(predicate); 
    .OrderBy(columns) 
    .Skip(amount) 
    .Take(anotherAmount); 

Dann ist mein Vorsprung begann ich habe die Einführung und es funktionierte gut zu:

var data = repository 
     .Where(predicate); 
     .OrderBy(columns) 
     .Select(myProjection); 

Ich war glücklich, dass alles funktioniert, so habe ich vermisst Skip and Take, aber stop - Nun gibt Nhibernate an, dass Select nicht unterstützt wird (NotSupportedException). Code:

var data = repository 
     .Where(predicate); 
     .OrderBy(columns) 
     .Skip(amount) 
     .Take(anotherAmount) 
     .Select(projection); 

Es ist ein Fehler oder mache ich etwas falsch?

+0

Dies ist ein bekannter Fehler. http://216.121.112.228/browse/NH-2317 –

Antwort

0

Meiner Meinung nach war das ein Fehler in NH. In 3.3.1.4000 Version funktioniert es gut.

0

Wenn Sie .Count() aufrufen, führen Sie die Abfrage aus, die Abfrage existiert nicht mehr. Sie müssen zwei separate Abfragen absetzen, um die Anzahl und die Liste zu erhalten.

Mit Future <> oder MultiQuery können Sie etwas Phantasievolles tun.

Edit: http://groups.google.com/group/nhusers/browse_thread/thread/16c296414aedc09d

Der zweite Beitrag hier sollte in der Lage sein, Sie in die richtige Richtung zu weisen.

+0

Count() ist hier nicht der Fall (der Fehler bleibt, wenn ich es entferne), also werde ich es aus Codebeispielen entfernen. –

+0

Oh, können Sie die gesamte Abfrage, den Teil aus dem Repository auch zeigen? – Phill

+1

Repository ist nur LinqProvider - aus ISession.Query