我正在尝试在 Piranha CMS 中实现一个简单的搜索功能。这使用了一个单独的控制器和一个输入字符串“q”,它是表单 GET 调用的结果。该字符串在每个空格处被拆分为一个称为关键字的字符串列表。
我已经实现了一个简单的搜索,它成功地根据标题和帖子的摘录和正文检索页面和帖子。然而,由于页面由任意区域组成,因此不能简单地直接查询这些区域。我尝试以多种方式获取 Region 正文的值,但最终得到 NotSupportedException 并显示以下消息:
LINQ to Entities 不支持指定的类型成员“Body”。仅支持初始化程序、实体成员和实体导航属性。
我发现如果 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
});
}
}
}
提前致谢。