Ошибка OrderByDescending во вложенной коллекции в запросе EF 2.1 - PullRequest
0 голосов
/ 09 сентября 2018

У меня проблема с этим запросом EF 2.1:

        return await _context.CorrespondenceItems
        .Include(x => x.Statuses.OrderByDescending(y => y.Date))
        .OrderByDescending(x => x.DateCreated)
        .ToListAsync();

Проблема в том, что OrderByDescending для коллекции Statuses. Я получаю ошибку:

System.InvalidOperationException: The Include property lambda expression 'x => {from CorrespondenceItemStatus y in x.Statuses orderby [y].Date desc select [y]}' is invalid. The expression should represent a property access: 't => t.MyProperty'. To target navigations declared on derived types, specify an explicitly typed lambda parameter of the target type, E.g. '(Derived d) => d.MyProperty'

Это моя (упрощенная) модель:

public class CorrespondenceItem
{
    [Key]
    public int CorrespondenceItemId { get; set; }

    public virtual List<CorrespondenceItemStatus> Statuses { get; set; 
}

public class CorrespondenceItemStatus
{

    [Key]
    public int CorrespondenceItemStatusId { get; set; }

    public int CorrespondenceItem_CorrespondenceItemId { get; set; }

    [ForeignKey("CorrespondenceItem_CorrespondenceItemId")]
    public virtual CorrespondenceItem CorrespondenceItem { get; set; }

    public DateTime Date { get; set; }

}

Обновление: для ясности, я бы хотел упорядочить по дате убывания коллекцию элементов CorrespondenceItems с их статусами, упорядоченными также по убыванию даты

1 Ответ

0 голосов
/ 10 сентября 2018

Попробуйте код ниже:

            var result = await _db.CorrespondenceItem
            .Include(i => i.Statuses)
            .Select(r => new CorrespondenceItem
            {
                CorrespondenceItemId = r.CorrespondenceItemId,
                DateCreated = r.DateCreated,
                Statuses = r.Statuses.OrderByDescending(s => s.Date).ToList()
            })
            .OrderByDescending(i => i.DateCreated)
            .ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...