2011-07-20 41 views
6

Với các lớp học sau:LINQ - mệnh đề where vào đối tượng trẻ em

public class Nation 
{ 
    public string Name { get; set; } 
    public IEnumerable<City> Cities { get; private set; } 
} 

public class City 
{ 
    public string Name { get; set; } 
} 

Giả Nation là gốc rễ tổng hợp và vì vậy tôi chỉ có một NationRepository và không phải là một CityRepository (do đó Nation là điểm khởi đầu cho các truy vấn LINQ) . Để làm rõ, điểm xuất phát của tôi sẽ là đối tượng IQueryable<Nation>.

Làm thế nào tôi sẽ viết một truy vấn mà trả về một tập hợp các đối tượng City theo logic sau đây:

Chọn tất cả City trường hợp mà Name bắt đầu với 'M' mà cha mẹ Nation 's tên là 'Anh'?

Trả lời

13

Bạn sẽ làm như sau:

var results = NationRepository.Where(n => n.Name == "UK") 
           .SelectMany(n => n.Cities) 
           .Where(c => c.Name.StartsWith("M")); 
8

Như thế này:

from n in Nation 
where n.Name == "UK" 
from c in n.Cities 
where c.Name.StartsWith("M") 
select c 
2
var result = nations.Where(n => n.Name == "UK") 
        .SelectMany(n => n.Cities) 
        .Where(c => c.Name.StartsWith("M")); 

EDIT: Kể từ @Justin Niessner đánh tôi ... có lẽ tổ thứ hai mệnh đề where

var result = nations.Where(n => n.Name == "UK") 
        .SelectMany(n => n.Cities.Where(c => c.Name.StartsWith("M")); 
Các vấn đề liên quan