Запрос Entity Framework с помощью ToList (). Last () в Where () - PullRequest
0 голосов
/ 31 августа 2018

Я должен получить записи из базы данных, последняя из которых 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 сначала из db, а затем искать те, которые в последний раз 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 Ответ

0 голосов
/ 31 августа 2018

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

 List<Order> orders = db.Orders
        .Include("OrderStatuses")
        .Where(x => x.OrderStatuses.OrderByDescending(q => q.YourCol).First().Status == StatusOrder.Registered)
        .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...