2010-07-06 8 views
5

Voici le problème: bref j'utiliser la stratégie d'identité comb.guid et j'ai besoin toutes les lignes faites après le marqueur sauvé ..NHibernate.Linq -> La méthode CompareTo n'est pas mis en œuvre

est ici par exemple de code fictif de ce Je suis en train de faire:

retour session.Linq .Lorsque (p => p.Id.CompareTo (lastSyncedEntityIdentity) == 1) .ToList();

Cela jette une exception en disant que CompareTo n'est pas mis en œuvre ...

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: 

Comme vous pouvez le voir pile j'ai essayé la version 2.1 de hornget trunk sans aucune aide

Toute velléité/indice ce que je dois faire pour contourner cette limitation qui, je pense, a un impact sur la plupart des gens qui utilisent la stratégie comb.guid?

Merci, Nikola

Répondre

0

Le problème ici est que la méthode CompareTo ne peut pas être traduit dans une requête SQL. Souvenez-vous que tout ce que fait NHibernate.Linq est de construire une instruction SQL Select à partir du prédicat défini dans une expression lambda, tout ce qui est utilisé dans le lambda doit être traduisible en une instruction SQL comparable.

si

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

peut être traduit à

SELECT * FROM Table WHERE Table.Id = 10299 

mais il n'y a pas de commande SQL pour CompareTo car cela est une méthode .net.