2012-01-11 5 views
1

Я хочу отфильтровать запрос CAML в ListItem.ContentType.Hidden.Как проверить ContentType.Hidden с помощью запроса CAML?

с SharePoint для Linq, как этот код.

var query = from item in list.GetItems(CamlQuery.CreateAllItemsQuery()) 
       where item.ContentType.Hidden == false select item; 

Если я проверю с помощью чистого запроса CAML, должен ли я писать код и как?

Простой вопрос.

спасибо.

ответ

4

Вы не можете проверить свойство Hidden в чистом запросе CAML. В CAML доступно только имя и идентификатор ContentType (Поля ContentType и ContentTypeID).

Если есть только несколько скрытых типов контента, которые должны быть исключены вы могли бы сначала загрузить эти скрытые типы контента и исключить их в CAML запросе:

Извлечение скрытых типов контента:

SPWeb web = // ... 
IEnumerable<string> contentTypeIds = web.AvailableContentTypes 
    .Cast<SPContentType>() 
    .Where(ct => ct.Hidden) 
    .Select(ct => ct.Id.ToString()); 

Запрос CAML:

<Where> 
    <And> 
    <Neq> 
     <FieldRef Name='ContentTypeID'/> 
     <Value Type='Text'>[HiddenContentTypeId]</Value> 
    </Neq> 
    <Neq> 
     <FieldRef Name='ContentTypeID'/> 
     <Value Type='Text'>[AnotherHiddenContentTypeId]</Value> 
    </Neq> 
    </And> 
    <!-- more hidden content types --> 
</Where> 
+0

Hi, Mr.Stefan. Ваше объяснение простое и очень прямое для меня. Спасибо за ваш замечательный совет. – user834964

Смежные вопросы