Я пытаюсь получить объект SPListItem с уникальным идентификатором (GUID). Посмотрев несколько сайтов (вкл. 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);
Тем не менее, несмотря ни на что ... мне всегда кажется, что возвращается ноль строк. Я не понимаю почему, потому что знаю, что используемые мной направляющие верны.
Есть идеи?
Недопустимый тип для уникального идентификатора, это должен быть Guid. Обновите ваш запрос:
<Where> <Eq> <FieldRef Name='UniqueId'/> <Value Type='Guid'>{0}</Value> </Eq> </Where>
Пожалуйста, попробуйте удалить все пробелы в строке QueryFormat.Вместо этого используйте что-то вроде этого:
"<Where><Eq><FieldRef Name=\"UniqueId\" /><Value Type=\"Lookup\">{0}</Value></Eq></Where>"
SharePoint не нравятся эти пробелы.
Я бы также предложил использовать одну из библиотек для генерации Caml-запросов, например: http://camldotnet.codeplex.com/ или http://camlex.codeplex.com/