Есть ли способ элегантно загрузить все дочерние объекты объекта EF, если экземпляр объекта был загружен в результате запроса атрибутов дочернего объекта?Вот простой пример того, что я спрашиваю:
Во-первых, несколько простых таблиц данных:
CREATE TABLE Invoices
(
InvoiceID int IDENTITY(1000,1) NOT NULL,
Customer nvarchar(50) NOT NULL,
InvoiceDate datetime NOT NULL,
CONSTRAINT PK_Invoices PRIMARY KEY (InvoiceID)
)
CREATE TABLE InvoiceItems
(
InvoiceItemID int IDENTITY(1,10) NOT NULL,
InvoiceFK int NOT NULL,
PurchasedItem varchar(24) NULL,
Quantity decimal(10,2) NULL,
ItemPrice money NULL,
CONSTRAINT PK_InvoiceItems PRIMARY KEY (InvoiceItemID),
CONSTRAINT FK_InvoiceItems_Invoice FOREIGN KEY (InvoiceFK)
REFERENCES Invoices (InvoiceID)
)
Теперь нам нужно запросить таблицу счетов на основе соответствующего счета-фактуры.пункт, но затем показать все элементы для каждого выбранного счета-фактуры, независимо от того, соответствует ли он критериям:
var qryOrders = from ordr in ctx.InvoiceItems
.Include("Invoice")
where ordr.PurchasedItem == "Buggy Whips"
select ordr;
foreach (var ordrItm in qryOrders)
{
Console.WriteLine("Order " + ordrItm.Invoice.InvoiceID + " contains buggy whips");
Console.WriteLine("Full contents of order:");
foreach (var itm in ordrItm.Invoice.InvoiceItems)
{
//this will only show the buggy whip item
Console.WriteLine(itm.PurchasedItem);
}
}
Я хочу показать все элементы заказа в каждом заказе, который содержит «Багги Кнуты», включая элементыэто не глючные кнуты.Если бы я писал это на SQL, я бы использовал предложение WHERE InvoiceID IN ()
с подзапросом.Мой вопрос: может ли Entity Framework сделать это элегантным образом?Я придумала несколько хаков, которые работают, но ничего плохого.