我想用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