实体框架链接表

时间:2011-02-27 18:10:30

标签: c# entity-framework linq-to-entities

在我的数据库中,我有以下三个表:

顺序
订单ID
订购日期
...

物品
项目ID
ITEMNAME
...

的OrderItems
订单ID
项目ID
数量 ...

OrderItems是一个链接/连接表。我有一个MVC页面,我想要检索订单并显示订购的所有内容。我像这样创建一个查询:

var order = (from o in db.Orders.Include("OrderItems.Item")
             where o.OrderID == id
             select o).SingleOrDefault();

现在我有一个看起来像的视图模型:

public class OrderViewModel {
    public Order Order { get; set; }
    public IEnumerable<Item> Items { get; set; }
}

如何获取我创建的查询以从OrderItems集合中提取项目?

修改
我真正想要的是,如果我的模型甚至根本没有这个实体。我希望我的实体成为:

订单
项目

Order实体将直接拥有Items集合,而不必通过OrderItems来获取Item。不过,我不确定这是否可行。

2 个答案:

答案 0 :(得分:2)

这个怎么样:

var order = (from o in db.Orders             
             where o.OrderID == id              
             select new OrderViewModel()                          
               {                             
                 Order = o,                             
                 Items = o.OrderItems.Select(i => i.Item)
               }).SingleOrDefault();

您无需在查询中调用Include来使用导航属性,因为您预测的结果很可能不需要在Order中加载导航属性。

答案 1 :(得分:0)

试一试:

var order = (from o in db.Orders.Include("OrderItems.Item")
             where o.OrderID == id
             select new OrderViewModel()
                        {
                            Order = o,
                            Items = o.OrderItems.Item    //maybe o.OrderItems.Item.ToList()
                        } ).SingleOrDefault();