Я пытаюсь реализовать простую функцию поиска в Ciran Piranha. Это использует отдельный контроллер и входную строку «q», которая является результатом формы GET-вызова. Строка разделяется на каждое пространство в список строк, называемых ключевыми словами.Поиск ключевых слов в области региона
Я добился простого поиска, который успешно извлекает страницы и сообщения, основанные на выдержке и теге заголовка и сообщения. Однако, поскольку страницы состоят из произвольных регионов, нельзя просто запросить их напрямую. Я пытался получать значение тела региона несколько способов, но я в конечном итоге получить NotSupportedException со следующим сообщением:
Указанного типа член «Body» не поддерживается в LINQ к Entities. Поддерживаются только инициализаторы, сущности и свойства навигации сущности.
Я понял, что получаю это, если Body не сопоставляется с столбцом в базе данных. Тем не менее, информация должна храниться где-то, и поскольку я хотел бы использовать предоставленный DataContext без прямого доступа к базе данных, мне интересно, как получить предварительное перечисление содержимого.
Я вижу, что содержимое загружается при перечислении, но я хочу избежать загрузки всех страниц и вместо этого выполнять фильтрацию в запросе.
Может кто-нибудь, пожалуйста, направить меня в правильном направлении. Я предоставил фрагмент из контроллера, который успешно запрашивает сообщения и страницы по названию.
using (Piranha.DataContext db = new Piranha.DataContext())
{
var pages = db.Pages.Include("Regions").Where(p => Keywords.Any(keyword => p.Title.Contains(keyword)));
var posts = db.Posts.Where(p => Keywords.Any(keyword => p.Title.Contains(keyword) || p.Excerpt.Contains(keyword) || p.Body.Contains(keyword)));
if (pages != null)
{
foreach (var page in pages)
{
Model.Results.Add(new SearchResultsModel.SearchResult()
{
Title = page.Title,
Id = page.Id
});
}
}
if (posts != null)
{
foreach (var post in posts)
{
Model.Results.Add(new SearchResultsModel.SearchResult()
{
Title = post.Title,
Id = post.Id
});
}
}
}
Заранее спасибо.
Спасибо, я изменил видимость InternalBody и он работает как шарм , Для будущих целей полным запросом страницы является теперь 'var pages = db.Pages.Include (« Регионы »). Где (p => Keywords.Any (keyword => p.Title.Contains (keyword) || (стр. Регионы. Любой (r => r.InternalBody.Contains (ключевое слово))))); '. Следует также обратить внимание на специальные символы, такие как å/å, ä/ä et.c.Я зарегистрировал запрос на перенос изменений, поэтому он должен находиться в главном репозитории, как только вы его объедините. –