Я довольно новичок в MVC из webforms, и это была действительно крутая кривая обучения для меня. Вот эта функция в следующем учебном пособии:Нужна помощь в понимании LINQ в MVC?
public ActionResult Index(string id)
{
string searchString = id;
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
Вот что я думаю, что знаю, что это происходит. Этот метод является результатом действия (без параметров), возвращающим представление. Параметры добавляются, чтобы указать приложению искать строку «id».
Я нахожу заявление лямбда немного легче понять. if
проверяет, имеет ли значение searchString
значение null, если оно не возвращает фильм, соответствующий описанию в searchString
.
В способе, однако, в параметре searchString
задано значение id
. Здесь я начинаю заблуждаться, сразу после определения searchString
оператор LINQ помещается внутри переменной movies
. В этом заявлении, какова цель m
? Почему это не определено или не так ли? То же самое с s
в лямбда.
Я считаю, что это эквивалентно 'var movies = db.Movies.Select (m => m)', который (по логике, по крайней мере) не-op (но это зависит от поставщика LINQ, я бы догадался). В основном, все это говорит: «Выберите все фильмы, если нет строки поиска, и в этом случае сохраняйте только фильмы, содержащие эту строку поиска». –
@ TheodorosChatzigiannakis, что я понимаю из вашего комментария. Выберите из фильма, где m больше или равно m .... im guessing m также частично определяется поисковой строкой. верный? Что вы подразумеваете под no-op? – Skullomania
@ TheodorosChatzigiannakis это настройка для получения правильного типа для 'var'. 'db.Movies', скорее всего, является' DbSet <> ', который не позволяет добавлять туда. – Johnbot