Как объединить результаты из нескольких запросов linq и затем отсортировать?

#c# #linq

#c# #linq

Вопрос:

У меня есть метод, который принимает ключ поиска и номер страницы и возвращает страницу данных. ( GetDataPage использует Skip и Take методы для получения нужной страницы.)

 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);
}
  

Это работает так, как ожидалось.
Теперь мне нужно изменить функцию так, чтобы она принимала список клавиш поиска, выполняла поиск в MyTable по всем клавишам поиска, упорядочивала результат и возвращала нужную страницу. Как мне объединить результаты поиска из нескольких запросов LINQ?

Комментарии:

1. С объединением? msdn.microsoft.com/en-us/library/bb386993 (v = против 110).aspx

2. Почему несколько запросов? Один запрос с правильным Where должен это сделать.

3. В настоящее время вы ищете символ в строке SearchKey вместо строки[] SearchKey. Ваш linq не должен нуждаться в изменении.

Ответ №1:

Попробуйте этот единственный запрос 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);
}
  

Ответ №2:

Если по какой-то причине вам действительно нужно несколько запросов, вы могли бы сделать это следующим образом:

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