2010-01-19 16 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 वर्ग Equals और GetHashCode सही ढंग से लागू नहीं होता है, यह डुप्लिकेट वापस आ जाएगी।

आप इस तरह इस का उपयोग कर क्वेरी समझ वाक्य रचना कर सकते हैं: (untested)

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

धन्यवाद, यह मैं वास्तव में क्या जरूरत है – GuestMVCAsync

संबंधित मुद्दे