2012-03-16 11 views
2

私はCAMLの2人のパラメタに限定されていた理由について、以前に(それが解決された)質問がありました。私は5のいずれかに一致するものを見つけ、リストからすべてのアイテムを収集私が今知りたいのは何Trouble with OR in Sharepoint CAMLこのクエリーに引き続きCAMLを使用できますか?

があり、私は5またはパラメータを受け入れるために、このCAMLクエリを再フォーマットすることができ、:参考

パラメーター。

私が尋ねる理由は、DesignerのSandboxソリューションWebパーツの展開に限られています。これらのソリューションは非常に限られたリソースしか持たず、できるだけ効率的なクエリを作成したいと思っています。ほとんどのLINQソリューションはCAMLと同じくらい効果的にSQL呼び出しを変更しません。

答えて

5

はい。 ORには制限がありません。 (CAMLは、SQLに変換される方法に起因するが約2000チェーンオペレータの最大の深さであるが、これは問い合わせツリーのバランスをとることによって増加させることができる。)

ただ、所望の組み合わせのために営巣OR年代を保ちます。私はXNode/XElementと再帰を使ってこれを "魔法のように"行うための関数を作成することをお勧めします。

ネストは非常にシンプルであることに注意してください(私は中置 C#の条件と同等と一緒に、何が起こるかを示すためにも接頭辞あるS-expression形でで書かれている):

1: (OR a b)    => a || b    => a || b 
2: (OR (OR a b) c)   => (a || b) || c   => a || b || c 
3: (OR (OR (OR a b) c) d) => ((a || b) || c) || d => a || b || c || d 

注意それぞれ新しくORは前の式をちょうど "ラップ"します。

パフォーマンスは、基礎となるSQL Serverデータベースのパフォーマンスに基づいており、CAMLでどのフィールドが使用されているかによって異なります。フィールドがインデックスの一部である場合、操作は「等しい」条件または「範囲」条件に対して非常に高速です。列が索引の一部ではなくても、「小さい」サイズのリストの場合、それは依然として非常に高速な操作です。

U2U CAML Query Builder ("Windows Version")のようなツールを使用して「試してみる」ことをお勧めします。

ハッピーコーディング。

関連する問題