我有一个带有外键等的工作 EF 系统,它使我能够为一家商店或连锁店拉回我的所有客户数据。
我使用以下代码获取数据。
var foo = from s in context.Shops
where (s.ShopId == shopId)
select s;
Shop 的导航属性定义为;
[ForeignKey("ShopId")]
public virtual ICollection<CustomerOrder> CustomerOrders { get; set; }
除其他外,CustomerOrder 包含状态和完成日期。
因此,目前在我的代码中,我有以下内容返回自特定日期以来已完成的所有已完成订单(状态 7)。
[NotMapped]
public virtual List<CustomerOrder> TotalCompletedCustomerOrders(DateTime dt)
{
return (from co in CustomerOrders where co.Status == 7 && co.CompletedDate > dt select co).ToList();
}
这是我检索数据的最有效方式吗?(我很欣赏在枚举集合之前不会检索客户订单,但即便如此,系统也必须处理潜在的数千条记录才能找到在该日期之后完成的那些。是否可能或需要将状态和/或日期包含在原始查询?
我已经尝试了以下几种变体,但都没有奏效。
where (d.ParentBusinessId == parentId && (d.CustomerOrders.Select(co => co.Status == 7)))
还是我过度设计了这个过程?(理论上,我希望从数据库中选择数据以获取状态和可选日期的方法,所以当我将数据传递到网页时,它所要做的就是呈现它)