EF 无法获取实体导航 属性 的引用实体

EF can't get the reference entity of navigation property of an entity

这是我的模型类

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.Itemnull,它将所有订单归为一组。 (我知道问题是 m.Item 没有加载到这个查询中)

在这里,我不知道如何使 m.Item 加载到此 LINQ 查询中。 请帮我做这个。

P.S.: 我用Entity Framework 6

我认为变量 serving 是一些对象的列表,而不是查询。如果我是对的,当您从 DB 获得 serving 时,您应该包括 items。它看起来像下面的代码:

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();
}