NHibernate.Linq - > CompareTo方法未实现

时间:2010-07-06 18:03:12

标签: linq-to-nhibernate

问题在于:简而言之,我使用了comb.guid身份策略,我需要在保存的标记之后创建的所有行。

这是我想要获得的虚拟代码示例:

  

返回会话.Linq                         .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: 

正如你从堆栈中看到的那样,我在没有任何帮助的情况下尝试了hornget trunk的2.1版本

为了绕过这个限制我必须做些什么提示/线索我认为这会影响大多数人使用comb.guid策略?

谢谢, 尼古拉

1 个答案:

答案 0 :(得分:0)

这里的问题是CompareTo方法无法转换为SQL查询。

请记住,所有NHibernate.Linq正在做的是从lambda表达式中定义的谓词构建SQL Select语句,lambda中使用的任何内容都必须可以转换为类似的SQL语句。

所以

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

可以翻译为

SELECT * FROM Table WHERE Table.Id = 10299

然而,CompareTo没有SQL命令,因为这是一个.net方法。