我的控制器中有以下代碼,它獲取多個詞搜索的第一個結果。類似於這個問題的答案: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