2016-10-22 98 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)