Запрос Entity Framework с помощью ToList().Last() в Where()

Я должен получить записи из базы данных, которая последняя из OrderStatus является Registered, Вот как я пытаюсь найти эти записи

    List<Order> orders = db.Orders
        .Include("OrderStatuses")
        .Where(x => x.OrderStatuses.ToList().Last().Status == StatusOrder.Registered)
        .ToList();

но я получаю исключение

LINQ to Entities не распознает метод метода Lomax.Models.OrderStatus LastOrderStatus, и этот метод нельзя преобразовать в выражение хранилища.

Есть ли способ не получить все Orders сначала из БД, а затем ищет тех, которые в прошлом OrderStatus какой я хочу? Или это не имеет значения (по скорости)?

Класс заказа:

public class Order
    {
        [Key]
        public int ID { get; set; } 
        (...)
        public virtual ICollection<OrderStatus> OrderStatuses { get; set; }
    }

Класс OrderStatus:

public class OrderStatus
    {
        [Key]
        public int ID { get; set; }
        public DateTime Date { get; set; }
        public Enumerates.StatusOrder Status { get; set; }

        [ForeignKey("Order")]
        public int OrderID { get; set; }
        public virtual Order Order { get; set; }
    }

1 ответ

Решение

Linq to entity не поддерживает.Last(). вы можете использовать orderby() и take() вместо

 List<Order> orders = db.Orders
        .Include("OrderStatuses")
        .Where(x => x.OrderStatuses.OrderByDescending(q => q.YourCol).First().Status == StatusOrder.Registered)
        .ToList();
Другие вопросы по тегам