首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用lambdas来表达“not in”?

如何使用lambdas来表达“not in”?
EN

Stack Overflow用户
提问于 2010-09-04 02:24:47
回答 2查看 578关注 0票数 7

我正在尝试使用NHLambdaExtensions通过NHibernate Criteria API创建一个not in子句。通过阅读文档,我可以通过执行以下操作来实现in子句

代码语言:javascript
复制
.Add(SqlExpression.In<Zone>(z => zoneAlias.ZoneId, new int[] { 1008, 1010 }))

但是,当我将它包装在SqlExpression.Not中时,我得到了错误

代码语言:javascript
复制
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>>'

我正在使用这段代码

代码语言:javascript
复制
.Add(SqlExpression.Not<Zone>(SqlExpression.In<Zone>(x => zoneAlias.ZoneId, new int[] { 1008, 1010 })))

我如何才能做到这一点呢?通过使用常规标准API,我能够做到这一点

代码语言:javascript
复制
.Add(Restrictions.Not(Restrictions.In("z.ZoneId", new[] { 1008, 1010 })))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-04 03:19:50

我没有直接使用criterion (我通常使用Linq2NH),但是看起来不是简单地想要一个boolean lambda,所以你不能给它另一个criterion。这可能会起作用,尽管我看到NH在lambdas中遇到了数组成员的问题:

代码语言:javascript
复制
.Add(SqlExpression.Not<Zone>(z=>new[]{1008,1010}.Contains(z.ZoneId))

编辑:垃圾。这里发生的事情是,框架实际上并没有使用lambda,所以虽然编译了lambda,但框架在运行查询的过程中实际上从来没有调用它。相反,它会反射地检查您的委托的MSIL,对您的lambda表达式进行逆向工程,并将其转换为SQL命令的字符串。显然,这是一个相当复杂的过程,设计人员试图通过让您指定正在做什么的提示(在本例中是您声明的SqlExpression类型)并寻找模式来标识该过程来简化该过程。然而,在这种情况下,即使给出了提示,框架也不知道您要做什么。

如果计算Not()子句背后的翻译器不能预测逻辑循环或方法调用的目的,那么您很可能会被卡住

代码语言:javascript
复制
.Add(SqlExpression.Not<Zone>(z=>z.ZoneId == 1008
                                || z.ZoneId == 1010))

天晓得,为了让Linq2NHibernate正常工作,我不得不用这种方式来简化表达式。

票数 1
EN

Stack Overflow用户

发布于 2010-12-23 19:48:38

将旧世界与lambdas结合使用似乎是可行的:

代码语言:javascript
复制
.Add(Expression.Not(SqlExpression.In<Zone>(z => zoneAlias.ZoneId, new int[] { 1008, 1010 }));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3638522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档