2012-01-11 61 views
1

我想從CAML查詢過濾到ListItem.ContentType.Hidden。如何使用CAML查詢檢查ContentType.Hidden?

與SharePoint像Linq這樣的代碼。

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

如果我檢查純粹的CAML查詢,我應該寫代碼和如何?

是一個簡單的問題。

謝謝。

回答

4

您無法在純CAML查詢中檢查Hidden屬性。在CAML中,只有ContentType的名稱和ID可用(字段ContentTypeContentTypeID)。

如果有必須要排除只有幾個隱藏的內容類型,你可以先加載這些隱藏的內容類型,並在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

嗨,斯特凡先生。你的解釋對我來說簡單而直接。感謝你的偉大建議。 – user834964 2012-01-12 00:52:16