EF无法获取实体导航属性的引用实体
本文关键字:实体 属性 引用 导航 EF 获取 | 更新日期: 2023-09-27 18:09:12
这是我的模型类
public class Serve
{
public int Id { get; set; }
public Table Table { get; set; }
public bool IsFinished { get; set; }
public decimal TotalMoney { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
public class Order
{
public int Id { get; set; }
public Item Item { get; set; }
public int Numbers { get; set; }
public bool IsCheifReceived { get; set; }
public bool IsCheifCooked { get; set; }
public Serve Serve { get; set; }
public Order()
{
IsCheifCooked = IsCheifReceived = false;
}
}
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public string Unit { get; set; }
public decimal Price { get; set; }
public Category Category { get; set; }
public bool IsNeedToNotifyChief { get; set; }
}
我想计算按同一项(这是餐厅的菜单项)分组的订单数量和总金额。
这是LINQ查询。
var serving = db.Serves
.Where(m => m.Table.Id == table.Id)
.Where(m => m.IsFinished == false)
.OrderByDescending(m => m.Id)
.FirstOrDefault();
var groupedOrder = serving.Orders
.OrderByDescending(m => m.Id)
.GroupBy(m => m.Item)
.Select(g => new
{
Item = g.Key,
Numbers = g.Sum(ri => ri.Numbers)
}).ToList();
但是在这种情况下,在.GroupBy(m => m.Item)
中m.Item
是null
,并且它将所有的order归为一组。(我知道问题是m.Item
未在此查询中加载)
在这里,我不知道如何使m.Item在这个LINQ查询中加载。请帮我做这件事。
注::我使用实体框架6
我认为变量服务是一些对象的列表,而不是查询。如果我是对的,你应该包括项目当你得到服务从DB。它将看起来像下面的代码:
var serving = db.Serves
.Include(x => x.Orders)
.Include(x => x.Orders.Select(x => x.Item)) //here you'll get your items
.Where(m => m.Table.Id == ta && m.IsFinished == false)
.OrderByDescending(m => m.Id)
.FirstOfDefault();
//and after that your code should work correctly
if(serving != null) //don't forget check it, if you use FirstOfDefault()
{
var groupedOrder = serving.Orders
.OrderByDescending(m => m.Id)
.GroupBy(m => m.Item)
.Select(g => new
{
Item = g.Key,
Numbers = g.Sum(ri => ri.Numbers)
}).ToList();
}