Tôi có một truy vấn kéo từ một cơ sở dữ liệu:Làm cách nào tôi có thể đặt thuộc tính trên tất cả các mục từ truy vấn LINQ với các giá trị từ một đối tượng khác cũng được lấy từ truy vấn?
List<myClass> items = new List<myClass>(from i in context
select new myClass
{
A = i.A,
B = "", // i doesn't know this, this comes from elsewhere
C = i.C
}
Tôi cũng có một truy vấn làm một điều tương tự:
List<myClass2> otherItems = new List<myClass2>(from j in context
select new myClass2
{
A = j.A, // A is the intersection, there will only be 1 A here but many A's in items
B = j.B
}
Trên thực tế các lớp này là lớn hơn và truy vấn nhiều dữ liệu được tách ra không chỉ bởi cơ sở dữ liệu nhưng bởi máy chủ là tốt. Có thể sử dụng truy vấn LINQ để điền thuộc tính B cho tất cả items
trong đó các mục có giao nhau không? Tất cả các biến vị ngữ LINQ được xây dựng chỉ xuất hiện để thực hiện tổng hợp, lựa chọn hoặc biểu thức bool.
Trong não của tôi, tôi có một cái gì đó như thế này, nhưng đây là tất cả off:
items.Where(x => x.B = (otherItems.Where(z => z.A == x.A).Single().B));
Hoặc tôi là lố bịch với cố gắng để làm công việc này trong LINQ và chỉ nên từ bỏ nó trong lợi của một vòng lặp for nơi thiết lập thực tế trở nên tầm thường? Bởi vì thời hạn tôi sẽ phải dùng đến vòng lặp for (và có lẽ nó sẽ kết thúc được nhiều hơn nữa có thể đọc được trong thời gian dài anyway), nhưng nó có thể làm điều này? Một phương pháp mở rộng có cần thiết để thêm một vị từ đặc biệt để cho phép điều này không?
Tôi sẽ nói vòng lặp của bạn là một triển khai tốt. – JonH
Bạn có thể hiển thị một tập dữ liệu đơn giản có cấu trúc chính mà bạn đang tìm kiếm không? Truy vấn cuối cùng cố gắng đạt được là gì? – Tormod
@Tormod: Truy vấn thứ hai chứa biến 'B'. Tôi đang tìm một biến vị ngữ hoặc phương pháp mở rộng sẽ thực hiện dân số của biến 'B' trong tập hợp đầu tiên. –