C# EF can';获取实体的导航属性的引用实体
这是我的模型课C# EF can';获取实体的导航属性的引用实体,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,这是我的模型课 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 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; }
}
但是在本例中,在.GroupBy(m=>m.Item)
中m.Item
为null
,它将所有订单分组到一个组中。(我知道问题是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();
}
上面提到的
服务
类的对象。您在哪里初始化订单
?@X-TECH我问的不是类服务
,我问的是服务
variable@Back我说,,这是服务的对象
,我不知道他在哪里初始化它。右键点击“服务”->“转到定义”将帮助您找到它
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();
}