我的控制器中有以下代码,它获取多个词搜索的第一个结果。类似于这个问题的答案:ASP:NET MVC multiple words in search获取IQueryable中的所有结果,而不是.FirstOrDefault
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)
我得到一个System.Linq.IQueryable(MyProject.Models.Items)“不能将‘’到” 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项或没有。当你想要获得像'Where()'这样的超过1个项目时,你可以找到一个Collection。现在你必须改变你的所有方法,他们可以处理一个物品集合,而不仅仅是一个物品 – Yggraz