当我运行这段代码
public PartialViewResult GetHardware()
{
IQueryable<Hardware> hardware = db.Hardwares;
HardwareState hwState = new HardwareState();
IQueryable<IGrouping<string, Hardware>> groupByCategory = hardware.GroupBy(g => g.Category);
foreach (IGrouping<string, Hardware> group in groupByCategory)
{
hwState.GroupName = group.Key;
hwState.GroupUnitsCount = group.Count();
hwState.StorageReservedCount
= group.Where(m =>
m.Place.IsStorage == true &&
m.PlaceID != (int)Constants.HardwareState.Created &&
m.HardwareState == (int)Constants.HardwareState.Reserved).Count();
}
return PartialView(hwState);
}
我收到有关导航属性的错误m.Place = null
当我使用 foreach 块的代码传输一些文本时
public PartialViewResult GetHardware()
{
IQueryable<Hardware> hardware = db.Hardwares;
HardwareState hwState = new HardwareState();
IQueryable<IGrouping<string, Hardware>> groupByCategory = hardware.GroupBy(g => g.Category);
hwState.StorageReservedCount
= hardware.Where(m =>
m.Place.IsStorage == true &&
m.PlaceID != (int)Constants.HardwareState.Created &&
m.HardwareState == (int)Constants.HardwareState.Reserved).Count();
foreach (IGrouping<string, Hardware> group in groupByCategory)
{
hwState.GroupName = group.Key;
hwState.GroupUnitsCount = group.Count();
}
return PartialView(hwState);
}
,导航属性未设置为null且不出现错误
扩展方法如.AsQueryable
orInclude(x => x.Place)
不帮我
我怎么解决这个问题?
更新:如果我将类型更改为IEnumerable
它IQueryable
开始工作!
但我想使用这种IQueryable
类型
UPDATE2:对不起,当我写错误是一个空的导航属性时,我没有正确说明。实际上出现的错误 “已经有一个打开的 DataReader 与此命令关联,必须先关闭。” 如本答案所述,这是因为:(引用)
“这种情况总是发生的另一种情况是,当您遍历查询结果 (IQueryable) 时,您将触发迭代内加载实体的延迟加载。”
但是没有说不使用 ToList() 或者 MARS 怎么解决问题