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; }
   }
25
задан JYelton 4 April 2012 в 20:12
поделиться

1 ответ

Вам необходимо позвонить в функцию SelectMany , которая принимает один элемент и позволяет получить несколько элементов из него.

Например:

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

Обратите внимание, что если класс не реализует , равно и GetHashCode правильно, это вернет дубликаты.

Вы можете сделать это, используя синтаксис понимания запроса, как это: (непроверенный)

var cities = (from product in NHibernateSession.Linq<Product>() 
              from day in product.Days
              where day.City != null
              select day).Distinct();
46
ответ дан 28 November 2019 в 21:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: