2012-12-06 4 views
0

나는 x 사람의 목록을 SharePoint 2010 목록에서 검색하고 있습니다. 어떻게에 XML에 유사한 또는 문을 작성 않는 경우 문배열에서 셰어 포인트 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

작품을 정확히 내가 필요. 감사! –