【发布时间】:2018-01-12 04:32:14
【问题描述】:
我的控制器中有以下代码,它获取包含多个单词的搜索的第一个结果。类似这个问题的答案:ASP:NET MVC multiple words in search
var items = from s in db.Items select s;
if (!string.IsNullOrEmpty(searchString) && !searchString.Any(x => Char.IsWhiteSpace(x)))
{
searchString.Trim();
items = items.Where(s => s.keywords.Contains(searchString) || s.notes.Contains(searchString)
}
else if (!string.IsNullOrEmpty(searchString) && searchString.Any(x => Char.IsWhiteSpace(x)))
{
searchString.Trim();
string[] strings = searchString.Split(' ');
var finalItems = new List<Items>();
foreach (var splitString in strings)
{
finalItems.Add(items.FirstOrDefault(s => s.notes.Contains(splitString)
|| s.keywords.Contains(splitString));
}
items = finalItems.ToList().AsQueryable();
return View(items.ToPagedList(pageNumber, pageSize));
}
我想得到所有匹配的结果而不是第一个匹配。现在,当我尝试将 .FirstOrDefault 行更改为:
finalItems.Add(items.Where(s => s.notes.Contains(splitString)
|| s.keywords.Contains(splitString)
我得到一个 'cannot convert from 'System.Linq.IQueryable(MyProject.Models.Items)' to 'MyProject.Models.Items。
我尝试将我的项目分配更改为:
var items = from s in db.Items
select s as IQueryable(Items);
这似乎解决了这个问题,但它破坏了我所有的 s.keywords.Contains 或 s.notes.Contains 并出现错误 'IQueryable(Items) 不包含关键字或注释的定义,并且没有扩展方法可以找到接受 IQueryable(Items) 类型的第一个参数的关键字或注释'。
【问题讨论】:
-
使用
FirstOrDefault()你会得到方法的名称说 1 项或什么都没有。当您想要获得超过 1 个像您使用Where()编码的项目时,您会返回一个集合。现在你必须改变你所有的方法,他们可以处理一个项目集合而不是只有一个项目
标签: c# linq model-view-controller