Tôi sẽ xem một số ví dụ LINQ từ một cuốn sách về MVC và tôi tự hỏi mục đích mà cuộc gọi chọn bên dưới có thể có. Có lẽ đó là một lỗi đánh máy nhưng tôi không thấy bất kỳ đề cập đến nó trong errata của cuốn sách.Mục đích có thể chọn của LINQ (x => x)
foreach(Product p in products
.Where(e => e.Name == productParam.Name)
.Select(e => e)) {
p.Price = productParam.Price;
}
Tôi đã kiểm tra hai ví dụ về trường hợp này .Select (e => e) đã được bao gồm và một trong đó không phải và mã giống nhau. Vì Where trả về IEnumerable được lọc bởi vị từ sau đó khi nào thì cuộc gọi chọn (với vị từ cụ thể ở trên) có cần thiết không? Nó có thực sự làm gì không? Nó có thể trong một số trường hợp góc kỳ lạ?
Điều duy nhất tôi có thể nghĩ đến là nếu bạn xác định rõ ràng các đối số chung và giá trị trả lại là giá trị chuyển đổi hoàn toàn từ nguồn. Bạn cũng có thể bao gồm các điểm ngắt để sửa lỗi một cách dễ dàng (có lẽ bạn sẽ yêu cầu các dấu ngoặc nhọn và một dòng mới cho điều đó). Nhưng khác với những người (đặc biệt là kể từ khi không phải là _actually happening_ trong mã bạn đăng), tôi không thể nghĩ ra bất kỳ mục đích đáng giá cho nó. Có lẽ một chuyển đổi lười biếng từ cú pháp truy vấn LINQ? –
Đây thực sự là một sai lầm phổ biến. Thậm chí phổ biến hơn là tát ToList trên mọi thứ. Mọi người thường không hiểu đầy đủ về mô hình thực hiện của các truy vấn LINQ (có thể hiểu được). – usr
@usr Tôi muốn có một phần mở rộng 'Force' (tiêu chuẩn) mặc dù .. có nhiều lần khi một đánh giá của một IQuerable/IEnumerable phải được buộc, ngay cả khi bạn không * thực sự * quan tâm đến một danh sách. Tên cũng sẽ làm cho nó rõ ràng hơn như các hoạt động mong muốn. –