IQueryable 与 ICollection(列表)
IQueryable vs ICollection (List)
我有这样一个案例研究:
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;
}
IQueryable
案例:
当我将第一个查询 - List<CategoryType>
更改为 IQueryable<CategoryType>
并从查询末尾删除 ToList()
时,我没有任何结果:
问题:
我要求解释,我不明白为什么会这样。我知道 IQueryable
在数据库方面做了一些工作.
编辑:
代码运行,最终效果图。
我有:
public IQueryable<CategoryType> CategoryTypePagination { get; set; }
并且在 ToList()
案例的结尾:
this.CategoryTypePagination = categories.AsQueryable();
在 IQueryable
案例中刚刚删除 .AsQueryable()
你得看看"Deferred Query Execution" and "Immediate Query Execution"
根据 this, IQueryable
uses something called lazy loading。
因此 IQueryable
的结果在首次使用之前不会加载,例如在 Sum
、ToList
或 ToArray
方法中,而 ToList
需要加载数据。因此,您可以在初始化两个对象后看到差异。
我有这样一个案例研究:
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;
}
IQueryable
案例:
当我将第一个查询 - List<CategoryType>
更改为 IQueryable<CategoryType>
并从查询末尾删除 ToList()
时,我没有任何结果:
问题:
我要求解释,我不明白为什么会这样。我知道 IQueryable
在数据库方面做了一些工作.
编辑: 代码运行,最终效果图。
我有:
public IQueryable<CategoryType> CategoryTypePagination { get; set; }
并且在 ToList()
案例的结尾:
this.CategoryTypePagination = categories.AsQueryable();
在 IQueryable
案例中刚刚删除 .AsQueryable()
你得看看"Deferred Query Execution" and "Immediate Query Execution"
根据 this, IQueryable
uses something called lazy loading。
因此 IQueryable
的结果在首次使用之前不会加载,例如在 Sum
、ToList
或 ToArray
方法中,而 ToList
需要加载数据。因此,您可以在初始化两个对象后看到差异。