这是更多的澄清类型问题,而不是关于LinqHelper.CreateQuery
方法的实际问题。Sitecore7 LinqHelper.CreateQuery Buggy?
因此,
该方法有3个重载。在这里讨论的2,分别是:1。 LinqHelper.CreateQuery<SearchResultItem>(searchContext, searchStringModel)
2. LinqHelper.CreateQuery<SearchResultItem>(searchContext, searchStringModel, startLocationItem)
[我没有使用任何其他上下文这里,所以使用了默认空]
现在,
为了在与特定搜索项目内容树的位置(例如一个特定的文件夹下有1000个项目),我可以使用查询使用方法1:
query = "location:{FOLDER_GUID};+custom:my_filed_name|bla_bla"
这完美的作品。 但是(从我的方法签名理解的是,)我也应该能够使用方法2这样的:
SitecoreIndexableItem folderID = SitecoreIndexableItem)contextDatabase.GetItem({FOLDER_GUID});
var index = ContentSearchManager.GetIndex(new SitecoreIndexableItem(Sitecore.Context.Item));
using (var context = index.CreateSearchContext())
{
List<SearchStringModel> searchStringModel = new List<SearchStringModel>();
searchStringModel.Add(new SearchStringModel("my_field_name", "bla_bla"));
List<Sitecore.Data.Items.Item> resultItems = LinqHelper.CreateQuery(context, searchStringModel, folderID).Select(toItem => toItem.GetItem()).ToList();
}
问题是上述方法(方法2)搜索工作正常,什么不起作用的是“startLocationItem”(在这种情况下为folderID)。
例如
IF在我的整个Sitecore的树具有包含共3项 “my_filed_name = bla_bla”
BUT,仅1项包含在文件夹({FOLDER_GUID} “my_filed_name = bla_bla”, “所述特定的文件夹” 在这种情况下)
THEN,
方法1返回1项(这是正确的) BUT,方法2返回3项,尽管“startLocationItem = {FOLDER_GUID} ...(这我不认为是正确的)
问题是:
1.方法1中“startLocationItem”的确切用途是什么?
2.使用“位置”过滤器或“方法2的startLocationItem”有什么好处?
谢谢Stephen,...正是我在找的东西。很有帮助。 –
您好斯蒂芬,您在LinqHelper上使用LINQ到Sitecore的观点非常有价值。 我还有一个问题: 这是我们仍然使用LinqHelper.CreateQuery解析数据源查询?像这样: var query = LinqHelper.CreateQuery(context,SearchStringModel.ExtractSearchQuery(queryString)).Select(toItem => toItem.GetItem())。 我注意到这个方法已经从Sitecore 7变成了sitecore 7.2 rev。只是想知道最佳做法是什么? 非常感谢提前。 –