Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?  [new]
Northrop
Member

Откуда:
Сообщений: 39
    public class OrderDetail
    {
        public Guid ObjectID { get; set; }
        public DateTime Created { get; set; }
        public string Comments { get; set; }
    }

     public class Order
    {
        public Guid ObjectID{ get; set; }
        public  Order PrevOrder { get; set; }
        public List<OrderDetail> OrderDetails { get; set; }
    }


Надо вернуть одним запросом все заказы и 3 последних детали к каждому(они точно есть). Пишу так:
var e1 = ctx.Orders.Include(e => e.OrderDetails .OrderByDescending(c => c.Created).Take(3)).ToList();


А мне в ответ:

The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties.


ЧЯДНТ?
24 янв 17, 15:12    [20140350]     Ответить | Цитировать Сообщить модератору
 Re: Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21987
Так в сообщении об ошибке вполне внятно все написано.
Include предполагает ссылку на навигационное свойство и не более того, а вы туда пихаете целое выражение.

Нужно понимать, что EF попытается преобразовать ваше выражение в единственный SQL-запрос, как вы его себе в данном случае представляете?
24 янв 17, 16:52    [20140964]     Ответить | Цитировать Сообщить модератору
 Re: Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1351
Northrop

ЧЯДНТ?


Вообще ВСЁ.
24 янв 17, 17:21    [20141093]     Ответить | Цитировать Сообщить модератору
 Re: Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1351
public class OrderDetail
    {
        public Guid OrderDetailID { get; set; }
        public Guid orderID { get; set; }
        public virtual Order order { get; set; }
        public DateTime Created { get; set; }
        public string Comments { get; set; }
    }

     public class Order
    {
        public Guid orderID{ get; set; }
        public virtual ICollection<OrderDetail> OrderDetails { get; set; }
    }


Ты б почитал чего, для начала.
24 янв 17, 17:25    [20141111]     Ответить | Цитировать Сообщить модератору
 Re: Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?  [new]
hVostt
Member

Откуда:
Сообщений: 18561
Northrop,

Так делать нельзя. Include с фильтром, сортировкой, подвыборками и прочим не работает.
Либо всё, либо ничего.

Переходи на проекции.
24 янв 17, 18:57    [20141547]     Ответить | Цитировать Сообщить модератору
 Re: Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?  [new]
Northrop
Member

Откуда:
Сообщений: 39
hVostt,

И как мне на проекциях такое изобразить тогда?
25 янв 17, 03:20    [20142562]     Ответить | Цитировать Сообщить модератору
 Re: Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?  [new]
Northrop
Member

Откуда:
Сообщений: 39
Если что, очень хочется избежать создания на ровном месте еще одного анонимного типа через select new. Да и вообще нового типа, хоть именованного хоть как.
25 янв 17, 03:23    [20142563]     Ответить | Цитировать Сообщить модератору
 Re: Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?  [new]
hVostt
Member

Откуда:
Сообщений: 18561
Northrop
hVostt,

И как мне на проекциях такое изобразить тогда?


Northrop
Если что, очень хочется избежать создания на ровном месте еще одного анонимного типа через select new. Да и вообще нового типа, хоть именованного хоть как.


Избежать этого в EF не получится. Либо анонимный, либо новый тип для извлечения проекции.
25 янв 17, 07:01    [20142607]     Ответить | Цитировать Сообщить модератору
 Re: Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?  [new]
Агнец за бортом
Member

Откуда:
Сообщений: 1351
Northrop
Если что, очень хочется избежать создания на ровном месте еще одного анонимного типа через select new. Да и вообще нового типа, хоть именованного хоть как.


Чем тебе не угодил анонимный тип?

var result = details.GroupBy(x => new { ord = x.order }).Select(x => new { order = x.Key.ord, threeD = x.OrderByDescending(z => z.Created).Take(3)});


Можешь обойтись и без него - но код увеличится изрядно - нужно будет "налету" создавать order, инитить его свойства, равно как и три последние детали.
25 янв 17, 12:27    [20143842]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить