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