Xem xét yêu cầu để thay đổi thành viên dữ liệu trên một hoặc nhiều thuộc tính của đối tượng có độ sâu 5 hoặc 6 cấp.Thay thế foreach lồng nhau bằng LINQ; sửa đổi và cập nhật thuộc tính sâu bên trong
Có các bộ sưu tập phụ cần được lặp lại để truy cập vào thuộc tính cần kiểm tra sửa đổi &.
Ở đây chúng tôi đang gọi một phương pháp dọn sạch địa chỉ đường phố của một Nhân viên. Vì chúng ta đang thay đổi dữ liệu trong các vòng, việc thực hiện hiện nay cần một vòng lặp for
để ngăn chặn sự ngoại lệ:
Không thể gán cho "someVariable" vì nó là một 'foreach lặp biến'
Dưới đây là thuật toán hiện tại (obfuscated) với lồng nhau foreach
và for
.
foreach (var emp in company.internalData.Emps)
{
foreach (var addr in emp.privateData.Addresses)
{
int numberAddresses = addr.Items.Length;
for (int i = 0; i < numberAddresses; i++)
{
//transform this street address via a static method
if (addr.Items[i].Type =="StreetAddress")
addr.Items[i].Text = CleanStreetAddressLine(addr.Items[i].Text);
}
}
}
Câu hỏi: thuật toán này có thể được thực hiện lại sử dụng LINQ? Yêu cầu là cho bộ sưu tập gốc để dữ liệu của nó được thay đổi bằng cuộc gọi phương thức tĩnh đó.
Cập nhật: Tôi đã suy nghĩ/nghiêng về hướng của giải pháp loại jQuery/chọn. Tôi không nói cụ thể câu hỏi này theo cách đó. Tôi nhận ra rằng tôi đã vượt qua ý tưởng đó (không có tác dụng phụ). Cảm ơn tất cả mọi người! Nếu có một cách để thực hiện một bộ chọn giống jQuery, hãy xem nó!
cảm ơn. của bạn và câu trả lời của Merhdad giống hệt nhau, nhưng tôi đã thấy bạn đầu tiên :) Tôi nhận thấy nó sẽ là vô nghĩa để gõ lại mã đó, nhưng tôi cảm thấy điều quan trọng là làm cho vấn đề phụ về hiệu ứng phụ –
LINQ không phải là máy chủ SQL, mặc dù việc thực hiện cho SQL khác với điều đó với .NET - Bạn vẫn có thể thay đổi các thuộc tính với cả hai bộ (LINQ to SQL) và chỉ C# LINQ. – ppumkin