2016-10-22 99 views
0

我有一個方法,它接受一個搜索關鍵字和一個頁碼並返回一頁數據。 (GetDataPage使用SkipTake方法來得到正確的頁面。)如何結合多個linq查詢的結果然後排序?

public JsonResult SearchResults(string searchKey, int page) { 
    var data = dbContext.MyTable.Where(x => x.Title.Contains(searchKey)).OrderByDescending(x => x.CreatedDate); 
    return GetDataPage(data, page); 
} 

這是按預期工作。 現在,我需要更改函數,以便它獲取searchKeys列表,爲所有搜索關鍵字搜索MyTable,然後返回所需頁面。我如何結合多個LINQ查詢的搜索結果?

+0

與工會? https://msdn.microsoft.com/en-us/library/bb386993(v=vs.110).aspx – C1sc0

+0

爲什麼多個查詢?適當的「Where」應該這樣做的單個查詢。 –

+0

您當前正在搜索字符串searchKey中的字符而不是string [] searchKey。你的linq不需要改變。 – jdweng

回答

1

使用Any方法試試這個單一的LINQ查詢:

public JsonResult SearchResults(IEnumerable<string> searchKeys, int page) 
{ 
    var data = dbContext.MyTable.Where(x => searchKeys.Any(serachKey => x.Title.Contains(searchKey))).OrderByDescending(x => x.CreatedDate): 
    return GetDataPage(data, page); 
} 
0

如果由於某種原因,你真的需要多個查詢,你可以做這樣的:

searchKeys.SelectMany(key => dbContext.MyTable.Where(x => x.Title.Contains(searchKey))) 
      .OrderByDescending(x => x.CreatedDate)