Как бы я изменил этот запрос LINQ на способ метода вместо способа поиска SQL

#c# #linq

Вопрос:

 public async Task<IActionResult> Index(string searchString)
{
    var movies = from m in _context.Movie
                 select m;

    if (!String.IsNullOrEmpty(searchString))
    {
        movies = movies.Where(s => s.Title.Contains(searchString));
    }

    return View(await movies.ToListAsync());
}
 

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

1. Можете ли вы просто не делать movies = _context.Movie.Where(s => s.Title.Contains(searchString)); этого ?

2. @RobJarvis — Нет. Очевидный случай-если searchString есть null . String.Contains взорвется, если ты пройдешь null мимо .

3. @GertArnold — Они говорят о синтаксисе запроса и метода . Предположительно, синтаксис запроса в вопросе ( from m in _context.Movie select m ) — это «способ поиска SQL».

4. Ну, @BrootsWaymb, я просто предполагал, что вы сохраните эту строку внутри условного блока, как в вашем примере. Я имел в виду, что нет необходимости выполнять первую часть, когда вы можете просто напрямую ссылаться на коллекцию _context.Movie вместо того, чтобы сначала запускать запрос LINQ.

Ответ №1:

Вы можете сделать следующее, если вам просто нужен список фильмов из вашего контекста в виде списка.

 var movies = _context.Movie.ToList();
 

Вы также можете сделать что-то вроде приведенного ниже, что делает примерно то же самое, но более похоже на синтаксис вашего запроса.

 var movies = _context.Movie.Select(s => s);
 

Таким образом, ваш код может быть примерно таким, как показано ниже.

   var movies = _context.Movie.Select(s => s);

  if (!String.IsNullOrEmpty(searchString))
  {
    movies = movies.Where(s => s.Title.Contains(searchString));
  }

  return View(await movies.ToListAsync());