gpt4 book ai didi

c# - 我应该在我的界面中指定 IQueryable over List 吗?

转载 作者:行者123 更新时间:2023-11-30 20:44:15 24 4
gpt4 key购买 nike

我想知道,在定义我的接口(interface)时,对于对象组,我是否应该更喜欢 IQueryable 而不是 List。或者 IEnumerable 可能更好,因为 IEnumerable 类型可以转换为 IQueryable 以便与 LINQ 一起使用。

我正在看一个在线类(class),它是处理 EntityFramework 的,最好使用 IQueryable,因为 LINQ 使用它(好吧,它不止于此,但现在可能并不重要)。使用了下面的代码,它让我思考是否应该为我的对象组指定 IQueryable 而不是 List。

namespace eManager.Domain
{
public interface IDepartmentDataSource
{
IQueryable<Employee> Employees { get; }
IQueryable<Department> Departments { get; }
}

如果我正在为调用存储库获取员工的服务构建接口(interface),我通常会指定

List <Employees> 

但这是最佳实践吗? IQueryable 会为实现我的接口(interface)的类提供更多灵 active 吗?如果他们不需要 LINQ(假设他们只想要一个列表),那么必须导入 LINQ 的开销又如何呢?我应该对这两者都使用 IEnumerable 吗?

最佳答案

IQueryable接口(interface)实际上是对尚未执行的 Entity Framework 的查询。当您在 IQueryable 上调用 ToList()First()FirstOrDefault() 等时, Entity Framework 将构造SQL查询和查询数据库。

IEnumerable另一方面“只是”集合中的枚举器。您可以使用它来过滤集合,但您会使用 LINQ to Objects。 Entity Framework 在这里没有发挥作用。

回答您的问题:视情况而定。如果您希望您的存储库的客户端能够进一步自定义他们可以执行的查询,您应该公开 IQueryable,但是如果您希望在您的存储库中完全控制如何查询数据库,您可以使用 IEnumerable.

我更喜欢使用 IEnumerable,因为这不会在整个应用程序中泄漏 Entity Framework 的使用。存储库负责数据库访问。进行 LINQ to EF 优化也更容易,因为查询仅在存储库中。

关于c# - 我应该在我的界面中指定 IQueryable over List 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29601545/

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