IEnumerable是否是允许过滤的数据的良好返回类型?

时间:2012-04-11 12:57:50

标签: c# ienumerable iqueryable

我刚刚阅读了这篇question,它让我思考为什么在检索数据时需要使用IEnumerable。我了解IQueryableIEnumerable之间的差异,但是对于允许过滤的数据,IEnumerable对象会更好吗?例如,一个包含日期的记录的表,所以我可以对日期进行排序。

2 个答案:

答案 0 :(得分:4)

如果您的对象在内存中 - 而不是来自其他数据源(如数据库) - 请使用IEnumerable<T>。这样,内置的LINQ to Objects将自动运行。

您甚至可以通过编写自定义扩展方法并使用yield returnyield break将LINQ扩展为对象。

如果您正在使用Entity Framework或其他使用IQueryable<T>的系统,我会将其保留为IQueryable<T>,直到您需要它作为对象。

答案 1 :(得分:0)

取决于。

如果您想首先接收所有数据,然后过滤返回的对象集合,请使用IEnumerable。

如果要在数据库上启用过滤(例如Linq-to-sql / Entity Framework),请更好地使用IQueryable。