#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)