c# - Entity Framework - 包含的导航属性的选择条件

标签 c# linq entity-framework navigation-properties

假设我有这些简化的 EF 生成实体...

public class PurchaseOrder
{
     public int POID {get;set;}
     public int OrderID {get;set;}
     public int VendorID {get;set;}
     public IEnumerable<Order> Orders {get;set;}
}

public class Order
{
     public int OrderID {get;set;}
     public decimal Price {get;set;}
     public IEnumerable<Item> Items {get;set;}
}

public class Item
{
     public int OrderID {get; set;}
     public string SKU {get;set;}
     public int VendorID {get;set;}
     public Order Order {get;set;}
}

业务逻辑:

一个订单可以有多个 PO,一个对应订单上的每个不同供应商(供应商在项目级别确定)。

我如何有选择地包含子实体?

查询 PO 时,我想自动包含订单和项目的子实体。

我使用 Include()...完成了这个

Context.PurchaseOrders.Include("Orders.Items");

这是它的工作并拉回相关实体,但是,我只想包括其 VendorID 与 PurchaseOrder 实体的 VendorID 相匹配的 Item 实体

对于传统 SQL,我只是将其包含在 JOIN 条件中,但 EF 会在内部构建它们。

我可以使用什么 LINQ 魔法告诉 EF 应用条件,而无需在实体之间手动创建 JOIN?

最佳答案

您不能有选择地拉回符合特定条件的某些子实体。您最好自己手动过滤掉相关订单。

public class PurchaseOrder
{
     public int POID {get;set;}
     public int OrderID {get;set;}
     public int VendorID {get;set;}
     public IEnumerable<Order> Orders {get;set;}

     public IEnumerable<Order> MatchingOrders {
         get {
            return this.Orders.Where(o => o.VendorId == this.VendorId);
         }
     }
}

关于c# - Entity Framework - 包含的导航属性的选择条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333934/

相关文章:

linux - Linux 上不支持 EF Core 平台

.net - 为什么 ToUpper 会导致 Entity Framework 5.0 切换到 Unicode?

c# - Azure 服务总线中继和 http 协议(protocol)

c# - 调试在 64 位环境中运行的 32 位应用程序

c# - 使用 C# 根据其关联属性之一选择 XML 值的最有效方法是什么

c# - LINQ 表达式适用于 LinqPad,但不适用于 C# Silverlight 应用程序

asp.net-mvc - 无法使用简单注入(inject)器为每个请求创建 DbContext

c# - 返回空的 linq 表达式

c# - UWP 中的绑定(bind)命令

c# - .Any() with Nullables - 当我期望 True 时返回 False