c# - 如何使用 lambda 表达 “not in”?

标签 c# nhibernate nhlambdaextensions

我正在尝试使用 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/

相关文章:

c# - 在 NHibernate 中为子查询使用接口(interface)

c# - 如何将接口(interface) obj 转换为类 obj?

c# - 使用 HttpWebRequest 发送大文件,根据需要增加/缩小缓冲区

asp.net-mvc - ASP.Net MVC、ORM 和 "heavy"对象

c# - NHibernate 何时生成 ID

c# - 如何使用 Lambda 扩展渲染 Max(Substring)

c# - 仅在上一个 Elapsed 事件完成后才触发 Timer 事件? [C#]

c# - 使用C#在Elasticsearch中搜索电话号码对象

nhibernate - 我应该从 NHibernate 事件监听器返回什么?