2010-07-06 26 views
5

這裏的問題:總之我用comb.guid身份的策略,我需要保存的標記之後所做的所有行..NHibernate.Linq - >方法的CompareTo未實現

下面是空的代碼示例什麼我想獲得:

回報session.Linq 。凡(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策略影響大多數人?

感謝, 尼古拉

回答

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方法。