我正在尝试使用 NHLambdaExtensions 通过 NHibernate Criteria API 创建一个 not in
子句。阅读文档,我能够通过执行 in
子句
.Add(SqlExpression.In<Zone>(z => zoneAlias.ZoneId, new int[] { 1008, 1010 }))
但是,当我将它包裹在 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 })))
我怎样才能做到这一点?使用常规的 Criteria API 我能够做到这一点
.Add(Restrictions.Not(Restrictions.In("z.ZoneId", new[] { 1008, 1010 })))
最佳答案
将旧世界与 lambda 一起使用似乎可行:
.Add(Expression.Not(SqlExpression.In<Zone>(z => zoneAlias.ZoneId, new int[] { 1008, 1010 }));
关于c# - 如何使用 lambda 表达 “not in”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3638522/