2010-07-06 13 views
5

Ecco il problema: insomma io uso la strategia identità comb.guid e ho bisogno di tutte le righe fatte dopo il marcatore salvato ..NHibernate.Linq -> Il metodo CompareTo non è implementata

Ecco esempio di codice fittizio di ciò che sto cercando di ottenere:

ritorno session.Linq .Dove (p => p.Id.CompareTo (lastSyncedEntityIdentity) == 1) ToList();

Questo genera un'eccezione dicendo che CompareTo non è implementata ...

System.NotImplementedException occurred 
    Message=The method CompareTo is not implemented. 
    Source=NHibernate.Linq 
    StackTrace: 
     at NHibernate.Linq.Visitors.RootVisitor.VisitMethodCall(MethodCallExpression expr) in e:\horn\.horn\orm\nhcontrib\nhibernate.linq\Working-2.1\src\NHibernate.Linq\Visitors\RootVisitor.cs:line 97 
    InnerException: 

Come si può vedere dalla pila Ho provato la versione 2.1 da hornget trunk senza alcun aiuto

Qualsiasi suggerimento/indovina cosa devo fare per aggirare questa limitazione che presumo abbia un impatto sulla maggior parte delle persone che usano la strategia comb.guid?

Grazie, Nikola

risposta

0

Il problema è che il metodo CompareTo non può essere tradotto in una query SQL.

Ricordare che tutto ciò che sta facendo NHibernate.Linq è la creazione di un'istruzione SQL Select dal predicato definito in un'espressione lambda, qualsiasi cosa utilizzata nella lambda deve essere traducibile in un'istruzione SQL confrontabile.

così

session.Linq.Where(p => p.Id == 10299); 

può essere tradotto per

SELECT * FROM Table WHERE Table.Id = 10299 

tuttavia non v'è alcun comando SQL per CompareTo come questo è un metodo NET.

Problemi correlati