IQueryable,List,IEnumerator之间的区别?

时间:2011-01-30 18:27:00

标签: c# linq list ienumerable iqueryable

我想知道IQueryable,List,IEnumerator和我何时应该使用它们之间的区别是什么?

例如,当使用Linq to SQL时,我会做这样的事情:

public List<User> GetUsers()
{
   return db.User.where(/* some query here */).ToList();
}

现在我想知道我是否应该使用IQueryable。我不确定在列表中使用它的好处。

3 个答案:

答案 0 :(得分:105)

答案 1 :(得分:8)

IQueryable<T>:摘要数据库访问,支持对查询的延迟评估 List<T>:条目集合。不支持懒惰评估
IEnumerator<T>:提供迭代和IEnumerable<T>的能力(IQueryable<T>List<T>都是)

该代码的问题非常简单 - 它总是在调用时执行查询。如果您要返回db.User.Where(...)(这是IQueryable<T>),您将持有对查询的评估,直到实际需要(迭代结束)。此外,如果该方法的用户需要指定更多谓词,那么这些谓词也会在数据库中执行,这样会更快。

答案 2 :(得分:0)

当您需要某个实体的强类型集合时,请使用iListList<item>

当您想要将哑数据作为对象集合获取时,使用IqueryableIenumurator,它将作为松散类型集合返回,并且不会应用任何限制。

我宁愿使用List<type>因为使用列表换行并在强类型集合中强制转换我的结果集。

此外,使用列表可以添加,排序和转换图层到Array,Ienumurator或Queryable。

相关问题