我想用NHLambdaExtensions創建一個帶有NHibernate Criteria API的not in
子句。閱讀文檔,我能夠做如何表達「不在」使用lambdas?
.Add(SqlExpression.In<Zone>(z => zoneAlias.ZoneId, new int[] { 1008, 1010 }))
然而,當我把它包起來,以實現in
條款各地SqlExpression.Not
我得到
Error 5 The best overloaded method match for 'NHibernate.LambdaExtensions.SqlExpression.Not<oms_dal.Models.Zone>(System.Linq.Expressions.Expression<System.Func<oms_dal.Models.Zone,bool>>)' has some invalid arguments
Error 6 Argument '1': cannot convert from 'NHibernate.Criterion.ICriterion' to 'System.Linq.Expressions.Expression<System.Func<oms_dal.Models.Zone,bool>>'
我使用這段代碼的錯誤
.Add(SqlExpression.Not<Zone>(SqlExpression.In<Zone>(x => zoneAlias.ZoneId, new int[] { 1008, 1010 })))
我該如何做到這一點?使用普通的標準API,我能夠做到這一點
.Add(Restrictions.Not(Restrictions.In("z.ZoneId", new[] { 1008, 1010 })))
正確的,它要一個布爾拉姆達。使用你的代碼,NH現在說當我執行查詢時,無法從new [] {1008,1010} .Contains(z.ZoneId)'確定成員類型。 – Mike 2010-09-03 19:28:26
現在提供的新代碼總是給出錯誤「無法確定來自...的成員」。我能想到的最簡單和最醜陋的解決方案就是簡單地執行'.Add(SqlExpression.Not(()=> zoneAlias.ZoneId == 1008))'。 – Mike 2010-09-07 16:18:13