在NHibernate中,当使用Criteria API来做Like语句时,我得到了如下内容:
query.Add(Restrictions.InsensitiveLike(Projections.Property<Order>(a => a.OrderId1), OrderId2, MatchMode.Anywhere));其中Order2只是一个本地字符串参数。(您可以将Order2替换为"AB10002")
这样就创建了一个类似这样的查询:
...WHERE Order.OrderId1 LIKE '%OrderId2%'但我也想检查一下:
..。或者像'%Order.OrderID1%‘这样的OrderId2
这有可能吗?
* like限制不允许投影属性作为第二个参数,这就是为什么我不知道如何“反转”Like。
发布于 2012-08-08 07:26:24
您可以链接Add,或者您应该能够使用具有两个InsensitiveLike的Restrictions.Or:
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方法具有字符串值属性名称的重载。也许是这样的?:
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 (尽管我不需要)。
https://stackoverflow.com/questions/11855140
复制相似问题