Я пытаюсь исключить результаты поиска, у которых есть поле, в котором хранится идентификатор элемента, пуст. Это поле, например, называется «типом». Я не смог это сделать, используя LINQ. Вот мой пример кода.Поиск пустых полей
public class SearchItem : SearchResultItem
{
[IndexField("type")]
public string Type{ get; set; }
}
public class Search
{
public static IEnumberable<Item> GetItems()
{
List<Item> items = new List<Item>();
var index = ContentSearchManager.GetIndex(new SitecoreIndexableItem(Sitecore.Context.Item));
using (var context = index.CreateSearchContext())
{
var indexItems = context.GetQueryable<SearchResultItem>()
.Where(x => !string.IsNullOrEmpty(x.Type))
.OrderByDescending(x => x.ReleaseDate);
foreach(var indexItem in indexItems)
{
var tempItem = indexItem.GetItem();
items.Add(tempItem);
}
}
return items;
}
}
Пустые строки сравнения не работают, и в коллекции предметов содержатся элементы с пустыми строками для поля Тип. Я использую настройки Box для Lucene.
Также, если вы видите что-то не так, проколите отверстия в моем коде. Это мой первый раз с Sitecore 7 Search.
Я не 100% на этом, но я не думаю, что можно сделать отрицательные совпадения в Lucene, как, например, с SQL. Используя IsNullOrEmpty, вы говорите, что вам нужно идентифицировать значения null/empty в индексе, но они никогда не были бы добавлены в индекс в первую очередь, так что ничего не подойдет. Итог, я не думаю, что вы можете проверить на отсутствие –