2011-07-20 26 views
6

Verilen aşağıdaki sınıfları burada:Linq - çocuk nesne üzerinde hüküm

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

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

Nation agrega köküdür varsayın ve bu yüzden sadece bir NationRepository ve yapmadıysanız bir CityRepository (böylece Nation Linq sorguları için başlangıç ​​noktasıdır) . Açıklığa kavuşturmak için başlangıç ​​noktam IQueryable<Nation> nesnesi olurdu.

Ben City nesneler topluluğu aşağıdaki mantığa göre döndüren bir sorgu yazarsınız nasıl

olan Name olan ebeveyn Nation UK ' 'ın adıdır' 'M' ile başlayan tüm City örneklerini seç? Bunun gibi

cevap

13

Aşağıdaki yapacağını @Justin Nießner beni yendi beri ... belki yuva ikinci nereye fıkra

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

:

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

EDIT:

from n in Nation 
where n.Name == "UK" 
from c in n.Cities 
where c.Name.StartsWith("M") 
select c