2013-01-14 29 views
9

Koşul ifadesini kullanıyorum ancak FilterExpression'a birden fazla koşul ekleyemiyorum. Herhangi biri yardımcı olabilir mi? Kaynak kodumu buraya gönderdim. Filtreler ileFilterExpression için Çoklu Koşullar

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

// filtre2

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

Daha karmaşık ifadeler söz konusu olduğunda, onları yaptığınız gibi ayarlamada zorlandığımı öğrendim. Bu başlatılabilir ama başlatıcı yaklaşımı kadar şeffaf değil. Bir saat içinde işe başladığımda, sizin için alternatif bir örnek göndereceğim. Umarım sizin için daha genişleyecektir. (Ayrıca, cevaplardan birini kabul etmeniz gerekiyor - benimki elbette en iyisi, haha.) –

cevap

21

Sorunuzu doğru anlamak emin değilim. Ben doğru, böyle bir hiyerarşik ifadesini oluşturmak istiyorsanız geldiyseniz:

(A_logicalName VE B_LogicalName) OR (B_LogicalName VE C_LogicalName)

doğru mu?

Aşağıdaki sorun sorununuzu çözmez mi?

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

Ayrıca bkz. MSDN.

+0

herhangi bir *** Fluent *** yardımcısı sürümü hakkında? – Kiquenet

11

Kullanmakta olduğum şey. Bir sebepten dolayı, kavramanın daha net olduğunu düşünüyorum. Muhtemelen başlangıçta sözdizimi sözdizimini kullanmam nedeniyle 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

Bunu gördüğüm her şeyden çok daha iyi * – Ryan

9

Durumu:

(A_logicalName AND B_LogicalName) OR (B_LogicalName AND C_LogicalName) 

de bu şekilde ifade edilebilir: Daha karmaşık bir sorgu MSDN bulunabilir

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; 

.