2013-01-14 3 views
9

조건 식을 사용하고 있는데 하나 이상의 조건을 FilterExpression에 추가 할 수 없습니다. 아무도 도와 줄 수 있습니까? 내 소스 코드를 여기 게시했습니다. 필터와FilterExpression에 대한 여러 조건

ConditionExpression :

// Filter1 
FilterExpression filter1 = new FilterExpression(); 
filter1.FilterOperator = LogicalOperator.And; 
filter1.Conditions.Add(new ConditionExpression("A_LogicalName", ConditionOperator.Equal, id1)); 
filter1.Conditions.Add(new ConditionExpression("B_LogicalName", ConditionOperator.Equal, id2)); 
query.Criteria.Filters.Add(filter1); 

// 필터 2

FilterExpression filter2 = new FilterExpression(); 
filter2.FilterOperator = LogicalOperator.And; 
filter2.Conditions.Add(new ConditionExpression("B_LogicalName", ConditionOperator.Equal, id3)); 
filter2.Conditions.Add(new ConditionExpression("C_LogicalName", ConditionOperator.Equal, id4)); 
q_ShoppingCartItemQuantityCheck.Criteria.Filters.Add(filter2); 
+0

더 복잡한 표현식에 관해서, 나는 당신이했던 것처럼 그들을 설정하는 것이 힘들다는 것을 알았다. 그것은 할 수 있지만 initializer 접근만큼 투명하지는 않습니다. 한 시간 만에 일하게 될 때, 나는 당신을 대신 할 대안을 게시 할 것입니다. 바라건대 그것은 당신을 위해 더 확장 될 것입니다. (또한, 대답 중 하나를 받아 들여야합니다. 물론 내 것이 가장 좋은 것입니다. 하하.) –

답변

21

내가 제대로 질문을 이해한다면 확실하지. 내가 바로이 같은 계층 적 표현 구축하려는 얻었다 경우

(A_logicalName 및 B_LogicalName) OR (B_LogicalName 및 C_LogicalName)

이 올 것입니다을?

다음 문제가 해결되지 않았습니까?

query.Criteria = new FilterExpression(); 
query.Criteria.FilterOperator = LogicalOperator.Or; 

FilterExpression filter1 = query.Criteria.AddFilter(LogicalOperator.And); 
filter1.Conditions.Add(new ConditionExpression("A_LogicalName", ConditionOperator.Equal, id1)); 
filter1.Conditions.Add(new ConditionExpression("B_LogicalName", ConditionOperator.Equal, id2)); 

FilterExpression filter2 = query.Criteria.AddFilter(LogicalOperator.And); 
filter2.Conditions.Add(new ConditionExpression("B_LogicalName", ConditionOperator.Equal, id2)); 
filter2.Conditions.Add(new ConditionExpression("C_LogicalName", ConditionOperator.Equal, id3)); 

예 : MSDN도 참조하십시오.

+0

어떤 *** Fluent *** 도우미 버전이 있습니까? – Kiquenet

11

다음은 내가 사용하는 것입니다. 웬일인지, 나는 그것을 이해하는 것이 더 명백하다. 아마도 이니셜 라이저 구문을 사용하므로 YMMV 일 것입니다.

... 
Criteria = new FilterExpression 
{ 
    FilterOperator = LogicalOperator.Or, 
    Filters = 
    { 
    new FilterExpression 
    { 
     FilterOperator = LogicalOperator.And, 
     Conditions = 
     { 
     new ConditionExpression("field1", ConditionOperator.NotNull), 
     new ConditionExpression("field2", ConditionOperator.NotNull) 
     } 
    }, 
    new FilterExpression 
    { 
     FilterOperator = LogicalOperator.And, 
     Conditions = 
     { 
     new ConditionExpression("field3", ConditionOperator.NotNull), 
     new ConditionExpression("field4", ConditionOperator.NotNull) 
     } 
    } 
    } 
} 
... 
+1

나는 내가 본 것보다 * 많이 * 우수하다는 것을 알았다. – Ryan

9

상태 :

(A_logicalName AND B_LogicalName) OR (B_LogicalName AND C_LogicalName) 

너무 이런 식으로 표현 될 수있다 : 더 복잡한 쿼리 MSDN에서 찾을 수 있습니다

FilterExpression filter = new FilterExpression(LogicalOperator.Or); 

FilterExpression filter1 = new FilterExpression(LogicalOperator.And); 
filter1.Conditions.Add(new ConditionExpression("A_LogicalName", ConditionOperator.Equal, id1)); 
filter1.Conditions.Add(new ConditionExpression("B_LogicalName", ConditionOperator.Equal, id2)); 

FilterExpression filter2 = new FilterExpression(LogicalOperator.And); 
filter2.Conditions.Add(new ConditionExpression("B_LogicalName", ConditionOperator.Equal, id2)); 
filter2.Conditions.Add(new ConditionExpression("C_LogicalName", ConditionOperator.Equal, id3)); 

filter.AddFilter(filter1); 
filter.AddFilter(filter2); 

query.Criteria = filter; 

.