在我的数据库中,我有以下三个表:
顺序
订单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。不过,我不确定这是否可行。
答案 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();