Entity Framework - Selective Condition on Included Navigation Property

Предположим, что у меня есть эти упрощенные сущности, сгенерированные 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 между сущностями?

6
задан ctorx 30 November 2011 в 22:32
поделиться