使用Where()中的ToList()。Last()的实体框架查询

时间:2018-08-31 16:20:19

标签: c# sql entity-framework tolist

我必须从数据库中获取记录,记录的最后OrderStatusRegistered。这就是我尝试查找那些记录的方法

    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 个答案:

答案 0 :(得分:0)

Linq to实体不支持.Last()。 您可以使用orderby()和take()代替

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