0

当我运行这段代码

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且不出现错误

扩展方法如.AsQueryableorInclude(x => x.Place)不帮我

我怎么解决这个问题?

更新:如果我将类型更改为IEnumerableIQueryable开始工作!

但我想使用这种IQueryable类型

UPDATE2:对不起,当我写错误是一个空的导航属性时,我没有正确说明。实际上出现的错误 “已经有一个打开的 DataReader 与此命令关联,必须先关闭。” 如本答案所述,这是因为:(引用)

“这种情况总是发生的另一种情况是,当您遍历查询结果 (IQueryable) 时,您将触发迭代内加载实体的延迟加载。”

但是没有说不使用 ToList() 或者 MARS 怎么解决问题

4

0 回答 0