我正在查询数据库并从中生成一个对象列表。
通常,从我的业务层,我返回此类型的IList缓存对象列表。如果我改变这个以返回IQueryable,那么这样做有什么好处? IQueryable给了我什么IList没有?
答案 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>?