Запрос 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();