NHibernate.Linq -> Метод CompareTo не реализован - PullRequest
5 голосов
/ 06 июля 2010

Вот проблема: короче, я использую стратегию идентификации comb.guid, и мне нужны все строки, сделанные после сохраненного маркера.

Вот пример фиктивного кода того, что я пытаюсь получить:

возврат сеанса. Ссылка .Where (p => p.Id.CompareTo (lastSyncedEntityIdentity) == 1) .ToList ();

Это вызывает исключение о том, что CompareTo не реализовано ...

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: 

Как видно из стека, я попробовал версию 2.1 из hornget trunk без посторонней помощи

Любой намек / подсказка, что мне нужно сделать, чтобы обойти это ограничение, которое, как мне кажется, влияет на большинство людей, использующих стратегию comb.guid?

Спасибо, Nikola

1 Ответ

0 голосов
/ 05 марта 2012

Проблема в том, что метод CompareTo не может быть переведен в SQL-запрос.

Помните, что все, что NHibernate.Linq делает, - это строит оператор SQL Select из предиката, определенного в лямбда-выражении, все, что используется в лямбда-выражении, должно переводиться в сопоставимый оператор SQL.

так

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

можно перевести на

SELECT * FROM Table WHERE Table.Id = 10299

однако нет команды SQL для CompareTo, так как это метод .net.

...