2013-01-14 22 views
9

Tôi đang sử dụng biểu thức Điều kiện nhưng tôi không thể thêm nhiều điều kiện vào một FilterExpression. Có ai giúp được không? Tôi đã đăng mã nguồn của mình ở đây.Nhiều điều kiện cho một FilterExpression

ConditionExpression với Bộ lọc:

// 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); 

// bộ lọc2

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

Khi nói đến các biểu thức phức tạp hơn, tôi phát hiện ra rằng tôi gặp khó khăn trong việc thiết lập chúng theo cách bạn đã làm. Nó có thể thực hiện được nhưng không minh bạch như cách tiếp cận khởi tạo. Khi tôi làm việc trong một giờ, tôi sẽ đăng một ví dụ thay thế cho bạn. Hy vọng rằng nó sẽ được mở rộng hơn cho bạn. (Ngoài ra, bạn cần phải chấp nhận một trong những câu trả lời - tôi chắc chắn sẽ là một trong những câu trả lời hay nhất, haha.) –

Trả lời

21

Không chắc chắn nếu tôi hiểu câu hỏi của bạn một cách chính xác. Nếu tôi đã làm đúng, bạn muốn xây dựng một biểu thức thứ bậc như thế này:

(A_logicalName VÀ B_LogicalName) OR (B_LogicalName VÀ C_LogicalName)

là đúng?

Sau đây không giải quyết được sự cố của bạn?

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)); 

Xem thêm ví dụ về MSDN.

+0

bất kỳ phiên bản *** Fluent *** helper nào về nó? – Kiquenet

11

Đây là những gì tôi đang sử dụng. Vì lý do nào đó, tôi thấy nó rõ ràng hơn để nắm bắt. Đó có thể là do thực tế tôi sử dụng cú pháp khởi tạo để 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

Tôi thấy rằng * nhiều * tốt hơn bất cứ điều gì khác mà tôi đã thấy – Ryan

9

Tình trạng:

(A_logicalName AND B_LogicalName) OR (B_LogicalName AND C_LogicalName) 

thể được thể hiện theo cách này quá:

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; 

Một truy vấn phức tạp hơn có thể được tìm thấy trên MSDN.

Các vấn đề liên quan