phép nói rằng chúng ta có:biểu LINQ để lọc một danh sách bộ sưu tập thực thể, và duy trì danh sách các thực thể
public class Foo
{
public long Id { get; set; }
public string Name { get; set; }
public ICollection<Bar> { get; set; }
}
public class Bar
{
public long Id { get; set; }
public int Age { get; set; }
public virtual Foo { get; set; }
public long FooId { get; set; }
}
dữ liệu của chúng tôi có thể trông giống như thế này: (giả List<Foo>
)
// Forget the syntax, just to demonstrate data
foo[0] = new Foo{ Id = 1, Name = "A", Bar = { collection of Bars with Ages over 10 }};
foo[1] = new Foo{ Id = 2, Name = "B", Bar = { collection of Bars with Ages over 20 }};
foo[2] = new Foo{ Id = 3, Name = "C", Bar = { collection of Bars with Ages under 10 }};
Bây giờ, hãy nói rằng tôi muốn tất cả những người đó là Foo
s nhưng chỉ với số Bar
của họ bao gồm một số Bar
với độ tuổi từ 5-25.
Đối với một cái gì đó như thế này, tôi sẽ làm việc ngược lại và nhận được tất cả các quán bar, sau đó nhận được tất cả các Foos liên quan đến những quán bar, và tái bản đồ các Bars trở lại Foo. Có vẻ quá phức tạp.
Để được rõ ràng hơn - Tất cả Foos với chỉ Bars của họ với lứa tuổi từ 5 đến 25 :)
http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – Androiderson
Câu hỏi của bạn là loại không rõ ràng - bạn có muốn tất cả 'Foo's với duy nhất của họ' Bar's với độ tuổi từ 5 đến 25 hoặc bạn chỉ muốn 'Foo' có 'Bar' với độ tuổi từ 5 đến 25? –
Một cách, chưa được đề xuất, là triển khai một phương thức mở rộng trên Foo với khai báo giống như: 'GetBarsBetween (int lower, int upper);' và đơn giản sử dụng phương thức extenion này để lọc và truy xuất các thanh chính xác trong một Foo. Sau đó, bạn có thể chỉ cần chọn tất cả Foo's 'where foo.GetBarsBetween (5, 25) .Any()'. Điều này không yêu cầu bất kỳ phân bổ memomry bổ sung hoặc cơ cấu lại các đối tượng hiện tại của bạn. Hai nhược điểm, bạn không thể đơn giản sử dụng mã hiện có để làm việc với các thanh được lọc và thời gian tính toán có phần cao hơn. – Polity