我正在使用Sitecore 7第一次潛入ContentSearchAPI,但遇到了一些麻煩。對於一個假設的問題,我決定編寫一個搜索,爲我的站點索引整個樹,抽出兩個模板中的一個,並駐留在特定路徑中。該查詢的代碼是:Sitecore內容搜索,轉換爲列表<item>並編輯
using (var context = index.CreateSearchContext())
{
var results = context.GetQueryable<SearchResultItem>()
.Where(item => item.TemplateId == GlobalId.UniversalContent
|| item.TemplateId == GlobalId.UniversalHome)
.Where(item => item.Path.Contains("/sitecore/content"))
.GetResults();
}
到目前爲止一切順利,搜索抓取需要的項目。但是現在我想在編輯模式下打開項目並更改所述項目上的字段值。以前當我與Sitecore的查詢工作,我用像下面這樣來實現:
foreach (Item i in itemList)
{
using (new SecurityDisabler())
{
i.Editing.BeginEdit();
i.Fields["DoNotIndex"].SetValue("1", true);
i.Editing.EndEdit();
}
}
但LINQ查詢的返回類型是SearchResultItem,因此它不會繼承項目的方法,包括編輯.BeginEdit()之類的。我玩弄了LINQ查詢,並將Cast()或OfType()與ToList()結合使用,但不斷收到錯誤,指出我無法將SearchResultItem轉換爲Item。
閱讀Sitecore POCO似乎讓我朝着正確的方向發展,但這似乎更多的是關於定義要閱讀的字段。有沒有辦法將一個SearchResultItem轉換爲一個項目,並打開該項目進行編輯?使用LINQ和ContentSearch API,我是否需要創建一個POCO,定義我想要的字段,然後使用POCO對其進行修改?