我想知道IQueryable,List,IEnumerator和我何时应该使用它们之间的区别是什么?
例如,当使用Linq to SQL时,我会做这样的事情:
public List<User> GetUsers()
{
return db.User.where(/* some query here */).ToList();
}
现在我想知道我是否应该使用IQueryable。我不确定在列表中使用它的好处。
答案 0 :(得分:105)
答案 1 :(得分:8)
IQueryable<T>
:摘要数据库访问,支持对查询的延迟评估
List<T>
:条目集合。不支持懒惰评估
IEnumerator<T>
:提供迭代和IEnumerable<T>
的能力(IQueryable<T>
和List<T>
都是)
该代码的问题非常简单 - 它总是在调用时执行查询。如果您要返回db.User.Where(...)
(这是IQueryable<T>
),您将持有对查询的评估,直到实际需要(迭代结束)。此外,如果该方法的用户需要指定更多谓词,那么这些谓词也会在数据库中执行,这样会更快。
答案 2 :(得分:0)
当您需要某个实体的强类型集合时,请使用iList
或List<item>
。
当您想要将哑数据作为对象集合获取时,使用Iqueryable
和Ienumurator
,它将作为松散类型集合返回,并且不会应用任何限制。
我宁愿使用List<type>
因为使用列表换行并在强类型集合中强制转换我的结果集。
此外,使用列表可以添加,排序和转换图层到Array,Ienumurator或Queryable。