实体框架中检索数据子集

本文关键字:数据 子集 检索 框架 实体 | 更新日期: 2023-09-27 18:10:57

我有一个工作的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)))

还是我对这个过程的设计过度了?(理论上,我想从数据库中选择数据以获取状态和可选日期的方法,所以当我将数据传递到网页时,它所需要做的就是呈现它)

实体框架中检索数据子集

本例中的" system"是SQL服务器,它的工作是从一个大得多的数据集中选择一组数据。如果查询执行计划执行得不好,您确实需要注意它,但是关注SQL Server必须处理来自更大集合的记录子集的想法是使用SQL服务器的全部意义。这是非常有效的。

你的原始查询在大多数情况下被优化为做子选择,所以让EF和SQL Server做它的工作,如果你有一个性能问题,然后处理它。