2012-08-07 2 views
0

는,이 같은 있습니다.NHibernate에 반전 Restrictions.Like 매개 변수 NHibernate에에서

...WHERE Order.OrderId1 LIKE '%OrderId2%' 

을 그러나 나는 또한 여부를 확인하려면 :이 같은 쿼리를 생성

(당신은 "AB10002"로 Order2을 대체 할 수있는)

... 또는 OrderId2 LIKE '% 주문을. 주문 ID1 % '

그게 가능합니까?

* Like 제한은 투영 된 속성을 두 번째 매개 변수로 허용하지 않기 때문에 같은 방식으로 "되돌릴"방법을 모르겠습니다.

답변

0

당신은 체인 중 하나 Add 년대, 또는 두 InsensitiveLikeRestrictions.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 방법은 .. 문자열 값 속성 이름에 대한 과부하를 가지고 아마 이런 일이 (I가 필요하지 않았더라도)

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), "%"))); 

당신이 그리고 거기에서뿐만 아니라를 추가해야 할 수 있습니다를? :.

+0

OrderId2가 Order의 속성이 아니라고 지정해야합니다. 내 원래 게시물을 업데이 트했습니다 – getit

+0

내 대답을 editted있다. –

+0

고마워,하지만 여전히 작동하지 않습니다. 컴파일하지만, 예를 들어 "a"와 같은 검색 문자열을 사용하면 다음 오류가 발생합니다. 속성을 확인할 수 없습니다 : 'a'중 : Order – getit