私はSitecore 7でContentSearchAPIへの最初のダイビングを行っていますが、少し問題があります。仮説的な問題では、自分のサイトのツリー全体を索引付けし、2つのテンプレートのうちの1つであり、特定のパスにあるアイテムを取り出します。クエリのコードは次のとおりです。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();
}
検索は必要なアイテムをつかむ。しかし、今ではアイテムを編集モードで開き、そのアイテムのフィールドの値を変更したいと考えています。私はサイトコアのクエリで働いていたときに以前、私はこれを達成するために、次のようなものを使用します。
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をItemに変換してアイテムを編集用に開く方法はありませんか? LINQとContentSearch APIを使用して、POCOを作成し、必要なフィールドを定義してからPOCOを使用して変更する必要がありますか?あなたは何ができるか