Tôi khá mới với MVC từ biểu mẫu web và nó đã là một đường cong học tập thực sự, thực sự dốc đối với tôi. Đây là chức năng trong hướng dẫn mà tôi đang theo dõi:Bạn cần trợ giúp để hiểu LINQ trong 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);
}
Đây là những gì tôi nghĩ rằng tôi biết điều đó đang xảy ra. Phương thức là kết quả Hành động (không có tham số) trả về một khung nhìn. Các tham số được thêm vào để cho ứng dụng tìm kiếm một chuỗi "id".
Tôi tìm thấy tuyên bố lambda dễ hiểu hơn một chút. Các if
đang kiểm tra xem nếu searchString
là null nếu không nó trả về bộ phim phù hợp với mô tả trong searchString
.
Tuy nhiên, trong phương pháp, searchString
được cung cấp giá trị id
trong thông số. Đây là nơi tôi bắt đầu bị lạc, ngay sau khi searchString
được định nghĩa, một câu lệnh LINQ được đặt bên trong biến movies
. Trong tuyên bố đó, mục đích của m
là gì? Tại sao nó không được xác định hoặc là nó? Tương tự với s
trong lambda.
Tôi tin rằng nó tương đương với 'var movies = db.Movies.Select (m => m)', ít nhất là (không hợp lý) (nhưng nó phụ thuộc vào nhà cung cấp LINQ, tôi đoán là). Về cơ bản, toàn bộ điều này nói: "Chọn tất cả các phim, trừ khi có chuỗi tìm kiếm - trong trường hợp đó, chỉ giữ phim chứa chuỗi tìm kiếm đó". –
@ TheodorosChatzigiannakis những gì tôi hiểu trong nhận xét của bạn là Chọn từ Phim trong đó m lớn hơn hoặc bằng m .... Tôi đoán m cũng được xác định một phần bởi searchString. chính xác? Bạn có ý nghĩa gì bởi no-op? – Skullomania
@TheodorosChatzigiannakis đó là một thiết lập để có được đúng loại cho 'var'. 'db.Movies' rất có thể là một' DbSet <> 'mà sẽ không cho phép thêm vào đâu. – Johnbot