IQueryable或IList

时间:2012-10-30 22:48:47

标签: c# collections iqueryable ilist enumerable

我正在查询数据库并从中生成一个对象列表。

通常,从我的业务层,我返回此类型的IList缓存对象列表。如果我改变这个以返回IQueryable,那么这样做有什么好处? IQueryable给了我什么IList没有?

4 个答案:

答案 0 :(得分:4)

IQueryable是一个用于查询数据库的接口,它定义了允许实现者执行诸如延迟执行和构建更优化查询(通过评估表达式树)等整洁事物的功能。 IList没有给你这个。

此外,IQueryable(大部分)是只读接口。 IList定义了“添加”,“删除”等,允许用户修改集合。如果这对你在语义上更有意义,那么一定要使用它,然后使用IEnumerable Linq扩展来获得IQueryable的大部分功能。

答案 1 :(得分:0)

如果您打算使用查询数据库,那么我认为IQueryable更有用。 APrta,使用IList,您可以添加,删除,从列表中获取特定项目。 这一切都取决于你想如何使用它..

答案 2 :(得分:0)

你可以返回IEnumerable<T>然后转换为任何一个以使其更灵活......但IQueryable<T>是更好的执行方法,你可以在字面上查询数据库。如果您想要操纵集合,我会选择IList<T>

答案 3 :(得分:0)

我喜欢将IEnumerable用于所有返回类型 - 并且我在方法中使用List实现它们,如果它们很简单则返回它,或者如果需要,我可以使用更专业的具体类。优点是,我很少,如果需要更改实现IEnumerable的类的客户端。我不在乎它是List还是Hash表。使用IList,您将无法使用List。

但是,如果你正在使用LINQ-to-SQL,或者你正在使用类中的大量数据,那么IQueryable支持IEnumerable没有的一些方法。 IEnumerable是ILIst和IQueryable的基本实现,因此我建议将其用作大多数函数的返回类型

查看这些文章,以便更好地解释IQueryable和IEnumerable之间的区别:

Returning IEnumerable<T> vs. IQueryable<T>What is the difference between IQueryable<T> and IEnumerable<T>?