gpt4 book ai didi

c# - 替代 ToString() 进行索引搜索(C# 转换为 SQL)

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:20 26 4
gpt4 key购买 nike

我目前在 Sitecore ( Sitecore 8 Update 2 ) 项目中有以下内容:

var index = ContentSearchManager.GetIndex("sitecore_web_index");
IQueryable<SearchResultItem> queryCalls = index.CreateSearchContext().GetQueryable<SearchResultItem>().Where(item =>
item.TemplateName == callTemplateName &&
item.Path.StartsWith(callStartingPath) &&
item.Language == Sitecore.Context.Language.Name &&
item.Fields["appliedthemes"].ToString().Contains(themeID))

这应该给我特定路径下的所有项目以及特定语言的特定模板名称(工作正常)。最后一行确保只返回带有特定标签的项目。

但是我似乎不能在最后一条语句中使用 ToString() 方法,因为它不能转换为 SQL。但是我找不到其他方式来写这个。

编辑:

错误

Server Error in '/' Application.
The method 'ToString' is not supported. Declaring type: System.Object
Description: An unhandled exception occurred.

Exception Details: System.NotSupportedException: The method 'ToString' is not supported. Declaring type: System.Object

最佳答案

这不是 LINQ to SQL,因此查询不会转换为 SQL,它会转换为针对您的基础搜索提供程序(Lucene、Solr、Coveo 等)的查询。

如您所见,不支持调用 .ToString(),但也不需要。您可以调用索引器并直接获取字段值:

var index = ContentSearchManager.GetIndex("sitecore_web_index");
using (var context = index.CreateSearchContext()) {
IQueryable<SearchResultItem> queryCalls = context.GetQueryable<SearchResultItem>().Where(item =>
item.TemplateName == callTemplateName &&
item.Path.StartsWith(callStartingPath) &&
item.Language == Sitecore.Context.Language.Name &&
item["appliedthemes"].Contains(themeID))
}

Item 项目类有一个索引器,它将返回字段的字符串值。如果该字段在项目上不存在,它还有返回空字符串的好处(而调用 item.Fields["Field Name"].Value 可能会导致 NullReference 异常,如果该字段不存在)。

关于c# - 替代 ToString() 进行索引搜索(C# 转换为 SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29967832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com