Entity Framework - Selective Condition on Included Navigation Property

前端 未结 3 1776
花落未央
花落未央 2020-12-20 18:22

Assume I have these simplified EF generated entities...

public class PurchaseOrder
{
     public int POID {get;set;}
     public int OrderID         


        
3条回答
  •  难免孤独
    2020-12-20 18:56

    You can't. EF doesn't allow conditions for eager loading. You must either use multiple queries like:

    var pos = from p in context.PurchaseOrders.Include("Order")
              where ...
              select p;
    var items = from i in context.Items
                join o in context.Orders on new { i.OrderId, i.VendorId} 
                   equals new { o.OrderId, o.PurchaseOrder.VendorId }
                where // same condition for PurchaseOrders
                select i;
    

    Or you can use projection in single query:

    var data = from o in context.Orders
               where ...
               select new
                  {
                      Order = o,
                      PurchaseOrder = o.PurchaseOrder,
                      Items = o.Items.Where(i => i.VendorId == o.PurchaseOrder.VendorId)
                  };
    

提交回复
热议问题