Предположим, что у меня есть эти упрощенные сущности, сгенерированные 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, по одному для каждого отдельного поставщика в заказе (поставщики определяются на уровне товара).
Как я могу выборочно включать дочерние сущности?
При запросе POs я хочу автоматически включать дочерние сущности для Order и Item.
Я добиваюсь этого, используя Include()...
Context.PurchaseOrders.Include("Orders.Items");
Это делает свою работу и возвращает связанные сущности, но, я хочу включить только те сущности Item, чей VendorID совпадает с VendorID сущности PurchaseOrder.
В традиционном SQL я бы просто включил это в условие JOIN, но EF строит такие условия внутри.
Какую LINQ-магию я могу использовать, чтобы заставить EF применить условие, не создавая вручную JOIN между сущностями?