IQueryable vs ICollection(列表)

时间:2018-09-06 08:37:14

标签: c# linq icollection

我有这样一个案例研究:

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构成了数据库方面的工作的一部分。

编辑: 代码有效,图片显示最终效果。

我有:

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

以及在ToList()案末:

this.CategoryTypePagination = categories.AsQueryable();

IQueryable情况下,刚刚删除了.AsQueryable()

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

根据thisIQueryable使用称为lazy loading的东西。

因此,IQueryable的结果要等到首次使用时才加载,例如在Sum方法中,例如在ToListToArrayToList方法中使用需要加载数据。因此,在对两个对象进行详细化之后,您会看到差异。