0

When i run this code

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

I get an error about that the navigation property m.Place = null

when i transfer some of the text with the code of the foreach block

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

,the navigation property is not set to null and the error does not appear

Extension methods such as .AsQueryable or Include(x => x.Place) do not help me

How can i solve this problem?

UPDATE: If i change the type to IEnumerable instead IQueryable it begins to work!

but i would like to work with the IQueryable type

UPDATE2: I'm sorry, i did not put it correctly when i wrote that the error is an empty navigation property. Error that appears in fact "There is already an open DataReader associated with this Command which must be closed first." As described in this answer it is because: (quote)

"Another scenario when this always happens is when you iterate through result of the query (IQueryable) and you will trigger lazy loading for loaded entity inside the iteration."

But it does not say how to solve the problem without using ToList () or MARS

michal.jakubeczy
  • 8,221
  • 1
  • 59
  • 63
Dev9
  • 31
  • 4

0 Answers0