2010-01-19 33 views
22

以下是我的課程。我有一個包含天數列表的產品。每一天都有一個城市物業。linq從兒童收藏中挑選物品

我需要創建一個linq查詢,它將爲我提供系統中所有產品上使用的不同城市。

我想是這樣的,但它不工作:

var cities = from product in NHibernateSession.Linq<Product>() select new { city = product.Days.Where(d => d.City != null).Distinct() }; //This returns the day items but i need distinct cities 

    public class Product : EntityBase 
    { 
     public virtual string Name { get; set; } 
     public virtual IList<ProductDayDefinition> Days { get; set; } 
    } 

    public class ProductDayDefinition : EntityBase 
    { 
     public virtual Product Product { get; set; } 
     public virtual City City { get; set; } 
    } 

回答

43

你需要調用SelectMany功能,這需要一個單一的項目,讓你從它那裏得到多個項目。

例如:

var cities = NHibernateSession.Linq<Product>() 
       .SelectMany(p => p.Days) 
       .Select(p => p.City) 
       .Where(c => c != null) 
       .Distinct(); 

注意,如果City類不實現EqualsGetHashCode正確的,這將返回重複。

爲此,您可以使用查詢理解語法如下:(未經測試)

var cities = (from product in NHibernateSession.Linq<Product>() 
       from day in product.Days 
       where day.City != null 
       select day).Distinct(); 
+0

謝謝,這是我需要什麼 – GuestMVCAsync 2010-01-19 17:24:05