2017-08-04 74 views
1

我的控制器中有以下代碼,它獲取多個詞搜索的第一個結果。類似於這個問題的答案: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)類型的第一個參數的擴展方法關鍵字或註釋'

+0

隨着'FirstOrDefault()'你喜歡的方法的名字說1項或沒有。當你想要獲得像'Where()'這樣的超過1個項目時,你可以找到一個Collection。現在你必須改變你的所有方法,他們可以處理一個物品集合,而不僅僅是一個物品 – Yggraz

回答

2

FirstOrDefault()僅返回某種類型的元素(MyProject.Models.Items)或null

Where()返回項目的集合。

Add()方法預計MyProject.Models.Items - 一個元素,而不是集合。

您應該使用AddRange()添加收藏:

finalItems.AddRange(items.Where(s => s.notes.Contains(splitString) 
        || s.keywords.Contains(splitString); 
相關問題