Ниже мои классы. У меня есть продукт, который содержит список дней. Каждый день имеет городскую недвижимость.
Я должен создать запрос 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; }
}
Вам необходимо позвонить в функцию 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();