在找到這個解決方案之前,我偶然發現了一些方法。我不確定它的可擴展性,但它適合我的需求,所以我想我會分享它。這種遞歸方法應該返回等效於1到N個字符串標題列表的
WHERE Title IN ([Title1], [Title2],...[TitleN])
。
private string _camlTitleEq = "<Eq>" +
"<FieldRef Name=\"Title\" />" +
"<Value Type=\"Text\">{0}</Value>" +
"</Eq>";
private XElement BuildOrClause(List<string> listItemTitles, int index)
{
//If we've reached the last item in the list, return only an Eq clause
if (index == listItemTitles.Count - 1)
return XElement.Parse(String.Format(_camlTitleEq, listItemTitles[index]));
else
{
//If there are more items in the list, create a new nested Or, where
//the first value is an Eq clause and the second is the result of BuildOrClause
XElement orClause = new XElement("Or");
orClause.Add(XElement.Parse(String.Format(_camlTitleEq, listItemTitles[index])));
orClause.Add(BuildOrClause(listItemTitles, index + 1));
return orClause;
}
}
而且你可以使用它像這樣:
SPQuery query = new SPQuery();
string titleIn = BuildOrClause(listItemTitles, 0).ToString(SaveOptions.DisableFormatting);
query.Query = "<Where>" +
titleIn +
"</Where>";
我希望這可以幫助別人仍然在SP工作2007年建設性的反饋意見是值得歡迎的!如果您在SharePoint 2010中,請使用In Operator中已有的內置程序。
+1不錯的答案。 – pixelbobby
該死的。花了兩個小時寫下我之後錯過了這個。 – David
我應該更新標題還是標籤以便於查找? – xr280xr