首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate反转Restrictions.Like参数

NHibernate反转Restrictions.Like参数
EN

Stack Overflow用户
提问于 2012-08-08 06:38:21
回答 1查看 1.4K关注 0票数 0

在NHibernate中,当使用Criteria API来做Like语句时,我得到了如下内容:

代码语言:javascript
复制
query.Add(Restrictions.InsensitiveLike(Projections.Property<Order>(a => a.OrderId1), OrderId2, MatchMode.Anywhere));

其中Order2只是一个本地字符串参数。(您可以将Order2替换为"AB10002")

这样就创建了一个类似这样的查询:

代码语言:javascript
复制
...WHERE Order.OrderId1 LIKE '%OrderId2%'

但我也想检查一下:

..。或者像'%Order.OrderID1%‘这样的OrderId2

这有可能吗?

* like限制不允许投影属性作为第二个参数,这就是为什么我不知道如何“反转”Like。

EN

回答 1

Stack Overflow用户

发布于 2012-08-08 07:26:24

您可以链接Add,或者您应该能够使用具有两个InsensitiveLikeRestrictions.Or

代码语言:javascript
复制
query.Add(Restrictions.InsensitiveLike(Projections.Property<Order>(a => a.OrderId1), OrderId2, MatchMode.Anywhere))
.Add(Restrictions.InsensitiveLike(Projections.Property<Order>(a => a.OrderId2), OrderId1, MatchMode.Anywhere));

// ... or ...

query.Add(
    Restrictions.Or(
        Restrictions.InsensitiveLike(Projections.Property<Order>(a => a.OrderId1), OrderId2, MatchMode.Anywhere,
        Restrictions.InsensitiveLike(Projections.Property<Order>(a => a.OrderId2), OrderId1, MatchMode.Anywhere
    )
);

我目前无法测试这一点,但根据我的记忆,我会这样做。

编辑:作为对你的评论的回应,你可以离开类型安全API,使用一些字符串。Expression.Like方法具有字符串值属性名称的重载。也许是这样的?:

代码语言:javascript
复制
query.Add(Restrictions.InsensitiveLike(Projections.Property<Order>(a => a.OrderId1), OrderId2, MatchMode.Anywhere))
     .Add(Expression.Like(OrderId2.ToString(), string.Concat("%", Projections.Property<Order>(a => a.OrderId1), "%")));

您可能还需要在其中添加一个And (尽管我不需要)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11855140

复制
相关文章

相似问题

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