gpt4 book ai didi

linq-to-sql - 我应该从 DAL 返回 IEnumerable 或 IQueryable 吗?

转载 作者:行者123 更新时间:2023-12-03 07:32:28 24 4
gpt4 key购买 nike

我知道这可能是意见,但我正在寻找最佳实践。

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

IEnumerable<Product> GetProducts();
IEnumerable<Product> GetProductsByCategory(int cateogoryId);
Product GetProduct(int productId);

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

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

请注意,我计划使用存储库模式,因此我将有一个像这样的类:

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> ?两者有何优点/缺点?

最佳答案

这取决于您想要什么行为。

  • 返回 IList 告诉调用者他们已收到他们请求的所有数据
  • 返回 IEnumerable 告诉调用者他们需要迭代结果,并且结果可能会延迟加载。
  • 返回 IQueryable 告诉调用者结果由可以处理某些类查询的 Linq 提供程序支持,从而将形成高性能查询的负担交给调用者。<

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

关于linq-to-sql - 我应该从 DAL 返回 IEnumerable<T> 或 IQueryable<T> 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3039262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com