IQueryable против ICollection (список) - PullRequest
       25

IQueryable против ICollection (список)

0 голосов
/ 06 сентября 2018

У меня есть такой пример:

ToList() дело:

    List<CategoryType> categories = (from c in categoryTypes where c.IsSysParam == isSysParamCategory select new CategoryType { Code = c.Code, CreateDate = c.CreateDate, EditDate = c.EditDate, IsProductCategory = c.IsProductCategory, IsSysParam = c.IsSysParam, Name = c.Name, TypeId = c.TypeId, ValueTypes = new List<ValueType>() }).ToList();

    List<ValueType> valueTypeList = new List<ValueType>();
    foreach (var c in categories.ToList())
    {
        valueTypeList = categoryTypes.Where(x => x.TypeId == c.TypeId).SelectMany(v => v.ValueTypes).Where(v => v.ParentValueId == null).ToList();
        c.ValueTypes = valueTypeList;
    }

enter image description here

IQueryable дело:

Когда я изменяю в первом запросе - List<CategoryType> на IQueryable<CategoryType> и удаляю ToList() из конца запроса, я не получаю никакого результата:

enter image description here

Вопрос:

Я прошу объяснений, я не понимаю, почему это происходит. Я знаю, что IQueryable делает некоторую часть работы на стороне базы данных.

Edit: Код работает, картинки показывают конечный эффект.

У меня есть:

  public IQueryable<CategoryType> CategoryTypePagination { get; set; }

и в конце ToList() case:

this.CategoryTypePagination = categories.AsQueryable();

в IQueryable корпус только что удален .AsQueryable()

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Согласно в этом , IQueryable используется нечто, называемое отложенная загрузка .

Таким образом, результаты IQueryable не загружаются до тех пор, пока они не будут впервые использованы, например, в методах Sum, ToList или ToArray, тогда как ToList запрашивает данные для загрузки. Таким образом, вы видите разницу после инициализации обоих объектов.

0 голосов
/ 06 сентября 2018
...