2012-12-06 63 views
0

我在SharePoint 2010列表中搜索我正在搜索的人的列表x。如何建立或聲明的XML類似於if語句數組中的Sharepoint XML查詢

if(person1 || person2 || person3 || ... personx) 

由於每個<Or>必須有確切2個孩子,沒有更多的也不少,我有這個至今:

query.InnerXml = "<Where>" + 
        "<Or>" + 
         "<Or>" + 
         "<Contains>" + 
          "<FieldRef Name=\"Member\" />" + 
          "<Value Type=\"Text\">" + 
           "Person1" + 
          "</Value>" + 
         "</Contains>" + 
         "<Contains>" + 
          "<FieldRef Name=\"Member\" />" + 
          "<Value Type=\"Text\">" + 
           "Person2" + 
          "</Value>" + 
         "</Contains>" + 
        "</Or>" + 
        "<Contains>" + 
         "<FieldRef Name=\"Member\" />" + 
         "<Value Type=\"Text\">" + 
           "Person3" + 
         "</Value>" + 
        "</Contains>" + 
       "</Or></Where>"; 

但我不能找出一種很好的方式來製作所有其他或語句,同時循環訪問我的x人列表

回答

1

SharePoint 2010添加了In子句,這簡化了此操作。

這裏有一個輔助方法,把所有的人都爲Value包裝:

public static string ValuesAsCAML(IEnumerable<string> values, string type) 
{ 
    StringBuilder output = new StringBuilder(); 
    foreach (string value in values) 
    { 
     output.AppendFormat("<Value Type=`{0}`>{1}</Value>", type, value); 
    } 

    return output.ToString(); 
} 

有了,你現在可以這樣寫:

var people = new[] { "Person1", "Person2", "Person3" }; 
string values = ValuesAsCAML(people, "Text"); 

var query = string.Format(
@"<Where> 
    <In> 
     <FieldRef Name='Member` /> 
     <Values> 
      {0} 
     </Values> 
    </In> 
</Where>" 
, values); 
+0

作品正是我需要的。謝謝! –