我试图从唯一ID(GUID)获取SPListItem对象。通过查看多个网站(包括http://sharepoint400.blogspot.com/2011/04/using-spsitedataquery-to-find-list.html和http://www.chakkaradeep.com/post/Retrieving-an-Item-from-the-RootWeb-and-Subwebs-using-its-UniqueId.aspx),我想出了以下代码。
const string QueryFormat =
@"<Where>
<Eq>
<FieldRef Name='UniqueId' />
<Value Type='Lookup'>{0}</Value>
</Eq>
</Where>";
SPSiteDataQuery query = new SPSiteDataQuery();
query.Webs = "<Webs Scope='SiteCollection' />";
query.Lists = "<Lists BaseType='0'/>";
query.Query = string.Format(QueryFormat, itemUniqueId);
query.RowLimit = 1;
//query.ViewFields = "<FieldRef Name='WebID' /><FieldRef Name='ListID' /><FieldRef Name='ID' />";
var results = SPContext.Current.Web.GetSiteData(query);
然而,无论如何......我似乎总是得到零行返回。我不明白为什么,因为我知道我使用的Guids是正确的。
有什么想法吗?
答案 0 :(得分:-1)
唯一标识符的格式无效,应为Guid。 更新您的查询:
<Where>
<Eq>
<FieldRef Name='UniqueId'/>
<Value Type='Guid'>{0}</Value>
</Eq>
</Where>
答案 1 :(得分:-2)
请尝试删除QueryFormat字符串中的所有空格。请改用这样的东西:
"<Where><Eq><FieldRef Name=\"UniqueId\" /><Value Type=\"Lookup\">{0}</Value></Eq></Where>"
SharePoint不喜欢这些空格。
我还建议使用其中一个库来生成Caml查询,例如: http://camldotnet.codeplex.com/ 要么 http://camlex.codeplex.com/