我有这样一个案例研究:
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()
答案 0 :(得分:1)
答案 1 :(得分:0)
根据this,IQueryable
使用称为lazy loading的东西。
因此,IQueryable
的结果要等到首次使用时才加载,例如在Sum
方法中,例如在ToList
,ToArray
或ToList
方法中使用需要加载数据。因此,在对两个对象进行详细化之后,您会看到差异。