Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать? / 9 сообщений из 9, страница 1 из 1
24.01.2017, 15:12
    #39390339
Northrop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    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 последних детали к каждому(они точно есть). Пишу так:
Код: c#
1.
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.

ЧЯДНТ?
...
Рейтинг: 0 / 0
24.01.2017, 16:52
    #39390466
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?
Так в сообщении об ошибке вполне внятно все написано.
Include предполагает ссылку на навигационное свойство и не более того, а вы туда пихаете целое выражение.

Нужно понимать, что EF попытается преобразовать ваше выражение в единственный SQL-запрос, как вы его себе в данном случае представляете?
...
Рейтинг: 0 / 0
24.01.2017, 17:21
    #39390487
Агнец за бортом
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?
Northrop
ЧЯДНТ?

Вообще ВСЁ.
...
Рейтинг: 0 / 0
24.01.2017, 17:25
    #39390492
Агнец за бортом
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
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; }
    }



Ты б почитал чего, для начала.
...
Рейтинг: 0 / 0
24.01.2017, 18:57
    #39390589
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?
Northrop,

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

Переходи на проекции.
...
Рейтинг: 0 / 0
25.01.2017, 03:20
    #39390715
Northrop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?
hVostt,

И как мне на проекциях такое изобразить тогда?
...
Рейтинг: 0 / 0
25.01.2017, 03:23
    #39390716
Northrop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?
Если что, очень хочется избежать создания на ровном месте еще одного анонимного типа через select new. Да и вообще нового типа, хоть именованного хоть как.
...
Рейтинг: 0 / 0
25.01.2017, 07:01
    #39390736
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?
NorthrophVostt,

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

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

Избежать этого в EF не получится. Либо анонимный, либо новый тип для извлечения проекции.
...
Рейтинг: 0 / 0
25.01.2017, 12:27
    #39390966
Агнец за бортом
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать?
NorthropЕсли что, очень хочется избежать создания на ровном месте еще одного анонимного типа через select new. Да и вообще нового типа, хоть именованного хоть как.

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

Код: c#
1.
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, инитить его свойства, равно как и три последние детали.
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Надо выбрать основную сущность и некоторые из дочерних в EF - как это сделать? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]