【发布时间】:2018-08-31 16:20:18
【问题描述】:
我必须从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 最后订单状态' 方法,并且该方法不能翻译成商店表达式。
有什么办法不首先从 db 中获取所有 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; }
}
【问题讨论】:
-
不要打电话给
ToList()无处不在。只在需要的地方调用它——它分配内存:每次都消耗内存和更多的 CPU。 -
我不知道你的数据结构,但你可以通过从订单状态表开始来简化这一点,例如 db.OrderStatuses.Where(x => x.Status == StatusOrder.Registered).Select (x => x.Order)
-
@johnny5 它需要所有
Orders,其中StatusOrder中的任何一个都是Registered。在Registered之后可以有Cancelled状态或任何其他我不想接受的状态。
标签: c# sql entity-framework linq