如何获得实体及其所有相关实体

时间:2015-09-07 00:23:23

标签: c# entity-framework linq

我正在使用EF6,我正在尝试获取实体列表。对于列表中的每个实体,我希望它在一次调用中填写子实体。

例如:

Order.Id
Order.ColletionOfItems

Item.Id
Item.OrderId
Item.ProductName
Item.CollectionOfOptions

Option.Name
Option.Value

using(var db = DbContext)
{   //I want to fill in everything during this call as I am using all of it in the
    //The calling function.
    OrderList = db.Orders.Select().include //This is where I am stuck
    return OrderList;
}

我希望返回的集合包含所有订单,与单个订单关联的所有项目以及与单个项目关联的所有选项。

如何构建我的linq语句来执行此操作?有没有比.Include("MyMajicString")更好的方法?我应该搜索什么,因为我的搜索导致很少有可接受的响应?

1 个答案:

答案 0 :(得分:4)

您需要使用Include扩展方法:

using(var db = new YourContext())
{   
    var OrderList = db.Orders.Include(o=>o.ColletionOfItems.Select(i=>i.CollectionOfOptions));
    return OrderList;
}

您还可以使用DbQuery.Include方法接收导航路径作为参数。要作为string加载的属性:

using(var db = new YourContext())
{   
    var OrderList = db.Orders.Include("ColletionOfItems.CollectionOfOptions");
    return OrderList;
}

但最好使用第一个因为强类型。使用第二种方法,您可能会错误地键入其中一个属性的名称,或者您可以更改导航的名称。将来模型中的属性,忘记重命名路径中的属性。

另外,小心加载大量数据。使用该查询,您将加载所有订单和相关属性,因此,请先尝试过滤(在Where调用后调用Include方法),然后再将所需信息加载到应用程序中。