EF CF 中的主详细信息查询和通用存储库模式

本文关键字:存储 模式 查询 CF 详细信息 EF | 更新日期: 2023-09-27 18:34:58

我使用的是通用存储库模式,如本文所示。

这些是我的 POCO 课程:

public class Order
{
    public int ID { get; set; }
    public int CustomerID {get; set;}
    [InverseProperty("Order")]
    public virtual List<OrderDetail> OrderDetail {get; set;}
    public static Expression<Func<Order, bool>> OrdersFromCustomer(decimal customerId)
    {
        return f => f.CustomerID == customerId;
    }
}
public class OrderDetail
{
    public int OrderID { get; set;}
    public int ID { get; set;}
    public int ItemID { get; set;}
    public int Amount { get; set;}
    [ForeignKey("OrderID")]
    public virtual Order { get; set;}
}

因此,当我在我的程序中想要获得客户的所有订单时,我可以这样做:

using (MyDbContext context = new MyDbContext())
{
    MyRepository repository = new MyRepository(context);
    var orders = repository.Get(Order.OrdersFromCustomer(25));
}

效果很好,但我有一个问题:如果我想要所有金额大于 100 的订单?如何构建一个表达式,用于筛选详细信息作为 OrderFromCustomer 函数?
我也尝试过使用 LinqKit,但没有结果。

EF CF 中的主详细信息查询和通用存储库模式

您可以将 Where 过滤器子句链接在一起,例如,要按行执行此操作,它如下所示:

 orders = repository.Get(filter: q => q.Where(f => f.CustomerID == customerId).Where( n => n.Amount > 100);