2013-01-14 29 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); 

// FILTER2

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

もっと複雑な表現については、私があなたのやり方でそれらを設定するのが難しいことが分かりました。それは実行可能ですが、イニシャライザのアプローチほど透明ではありません。私が1時間以内に就職すると、あなたの代わりの例が掲載されます。うまくいけば、それはあなたのためにさらに拡張可能になるでしょう。 (また、あなたは答えの一つを受け入れる必要があります - 私のものはもちろん、最高のものです、笑) –

答えて

21

私が正しくあなたの質問を理解していればわかりません。私は右のそれを得た場合 は、次のような階層的な表現を構築したい:

(A_logicalName AND B_LogicalName)OR(B_LogicalName AND 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) 

も、このように表現することができる。

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; 

より複雑なクエリはMSDNで見つけることができます。