Helpex - Trao đổi & giúp đỡ Đăng nhập
36

Hãy xem xét một tình huống mà bạn muốn truy xuất một Listhoặc IEnumerablecác giá trị của tất cả các hộp kiểm đã chọn trong một <asp:CheckBoxList>.

Đây là cách triển khai hiện tại:

IEnumerable<int> allChecked = (from item in chkBoxList.Items.Cast<ListItem>() 
                               where item.Selected 
                               select int.Parse(item.Value));

Câu hỏi : Bạn sẽ cải thiện truy vấn LINQ này bằng cách sử dụng biểu thức lambda hoặc cú pháp lambda như thế nào?

36 hữu ích 3 bình luận 39k xem chia sẻ
88

Bạn đang sử dụng các biểu thức lambda - chúng chỉ bị che giấu khi bạn sử dụng các toán tử truy vấn của C #.

Hãy xem xét rằng điều này:

IEnumerable<int> allChecked = (from item in chkBoxList.Items.Cast<ListItem>() 
                               where item.Selected 
                               select int.Parse(item.Value));

Được biên dịch cho cái này:

IEnumerable<int> allChecked = chkBoxList.Items.Cast<ListItem>()
                              .Where(i => i.Selected)
                              .Select(i => int.Parse(i.Value));

Như bạn có thể thấy, bạn đã sử dụng hai biểu thức lambda (chúng là các tham số của WhereSelectcác phương thức) và bạn thậm chí còn không biết điều đó! Truy vấn này ổn và tôi sẽ không thay đổi nó.

88 hữu ích 1 bình luận chia sẻ
23

Tôi sẽ cải thiện biểu thức truy vấn bằng cách thực hiện lệnh gọi Cast<T>ngầm định:

IEnumerable<int> allChecked = from ListItem item in chkBoxList.Items 
                              where item.Selected 
                              select int.Parse(item.Value);

Khi bạn chỉ định kiểu của một biến phạm vi, trình biên dịch sẽ chèn một lệnh gọi đến Cast<T>cho bạn.

Ngoài ra, tôi hoàn toàn đồng ý với Andrew.

CHỈNH SỬA: Đối với GONeale:

IEnumerable<int> allChecked = chkBoxList.Items
                                        .Cast<ListItem>()
                                        .Where(item => item.Selected)
                                        .Select(item => int.Parse(item.Value));
23 hữu ích 4 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# asp.net linq webforms , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading