2011-01-31 4 views
18

OData에서 $ filter 시스템 쿼리 옵션을 사용하여 런타임에 필터 값이 전송되는 위치에서 필터를 실행합니다.OData 필터 옵션 (null 값 또는 빈 값 처리)

예로 하나로, OData URL은 다음과 같습니다

http://services.odata.org/Northwind/Northwind.svc/Customers $ 필터 = CustomerID를 EQ @InCustomerID 및 국가 EQ @InCountry @InCustomerID & @InCountry가 입력

? equal 필터의 값. 런타임에

사용자가 고객 ID에 대한 몇 가지 값 (예를 들어 'ABCD') 우리가 'ABCD'

하여 @InCustomerID을 대체 할 들어갑니다 다음과 같이 런타임시 쿼리는 다음과 같습니다

http://services.odata.org/Northwind/Northwind.svc/Customers $ 필터는 사용자가 다음 값을 입력 한 상기 경우 = CustomerID를 당량 'ABCD'와 국제 당량 'US에게'

:의 CustomerID => 'ABCD'와 국가 => 'US'

제 질문은 OData $ 필터의 null 값 처리에 관한 것입니다. 사용자가 CustomerID 값을 입력하지 않으면 특정 국가의 모든 고객을 선택하려고합니다.

SQL 경우 이것은 같은 것이다 : 고객

선택 * 어디에 ((CustomerID를 = @InCustomerID) 또는 (@CustomerID가 null))와 (나라 = @Country).

사실 논리적 조건의 특정 조건자가 항상 참이되도록 null 값이나 빈 값을 처리하는 방법.

OData 필터링을 사용하면이 옵션을 사용할 수 있습니까? 쿼리가 같은 것으로 변질 것입니다 귀하의 경우에는

$filter=CustomerID eq null 

을 :

답변

22

이 같은 항등 연산자를 사용하여 null로 비교할 수 있습니다 작동합니다

$filter=(CustomerID eq null) or (null eq null) 

, 그러나 그것은 아주 좋은 아니에요 . 그런 경우에 술어를 완전히 제거 하시겠습니까?

+0

나는 깨끗한 해결책이 아니다. 그러나 필터가 정적으로 형성되고 런타임에 특정 필터 입력에 대해 null 값을 가져올 수 있으므로 제한적입니다. 이러한 시나리오에서는 쉬운 대안이 없습니다. 술어를 완전히 제거하기가 어려울 것입니다. 그 이유는 URL을 파싱하고 null 술어를 제거해야하기 때문입니다. – Venki

+1

(null eq null)이 효과가 있습니까? –