首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该从DAL返回IEnumerable<T>或IQueryable<T>吗?

我应该从DAL返回IEnumerable<T>或IQueryable<T>吗?
EN

Stack Overflow用户
提问于 2010-06-15 01:06:47
回答 4查看 6.4K关注 0票数 38

我知道这可能是我的观点,但我正在寻找最佳实践。

据我所知,IQueryable<T>实现了IEnumerable<T>,所以在我的DAL中,我目前有如下方法签名:

代码语言:javascript
复制
IEnumerable<Product> GetProducts();
IEnumerable<Product> GetProductsByCategory(int cateogoryId);
Product GetProduct(int productId);

我应该在这里使用IQueryable<T>吗?

这两种方法的优缺点是什么?

请注意,我计划使用Repository模式,因此我将拥有一个如下所示的类:

代码语言:javascript
复制
public class ProductRepository {

    DBDataContext db = new DBDataContext(<!-- connection string -->);

    public IEnumerable<Product> GetProductsNew(int daysOld) {
        return db.GetProducts()
          .Where(p => p.AddedDateTime > DateTime.Now.AddDays(-daysOld ));
    }
}

我应该把我的IEnumerable<T>改成IQueryable<T>吗?其中之一有什么优点/缺点?

EN

Stack Overflow用户

回答已采纳

发布于 2010-06-15 01:14:46

这取决于你想要什么样的行为。

  • 返回IList告诉调用者他们已经收到了他们已经收到的所有数据IEnumerable告诉调用者他们将需要迭代结果,这可能是懒惰的IQueryable告诉调用者结果得到了可以处理某些类查询的Linq提供程序的支持,从而将形成高性能查询的负担加到了调用者身上。

< requested

  • Returning >F213

虽然后者为调用者提供了很大的灵活性(假设您的存储库完全支持它),但它是最难测试的,而且可以说是最不确定的。

票数 51
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3039262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档