您可以使用 chain Add
,也可以使用Restrictions.Or
两个InsensitiveLike
:
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(尽管我不需要)。