【发布时间】:2015-04-13 09:04:13
【问题描述】:
我想知道,在定义我的接口时,对于对象组,我是否应该更喜欢 IQueryable 而不是 List。或者也许 IEnumerable 更好,因为 IEnumerable 类型可以转换为 IQueryable 以用于 LINQ。
我在网上查看一门课程,它正在处理 EntityFramework,最好使用 IQueryable,因为 LINQ 使用它(好吧,还有更多,但现在可能并不重要)。 使用了下面的代码,这让我开始思考是否应该为我的对象组指定 IQueryable 而不是 List。
namespace eManager.Domain
{
public interface IDepartmentDataSource
{
IQueryable<Employee> Employees { get; }
IQueryable<Department> Departments { get; }
}
如果我正在为调用存储库以获取员工的服务构建一个接口,我通常会指定
List <Employees>
但这是最佳做法吗? IQueryable 会为实现我的接口的类提供更大的灵活性吗?如果他们不需要它(比如说他们只想要一个列表),那么必须导入 LINQ 的开销呢?我应该对这两个都使用 IEnumerable 吗?
【问题讨论】:
-
您可能应该用“C#”标记您的问题以引起更多关注。
-
哦,LINQ 实际上也很容易使用
IEnumerable。区别在于您是要提供一组调用者可以使用的数据,还是要提供该数据的代理。就个人而言,我会选择IEnumerable/IList,除非你有特定的理由使用IQueryable。IQueryable让你的界面太宽了。让你的界面比“这里的所有员工,随心所欲”更紧密:) -
使用
IQueryable会给接口的实现者带来负担。仅当存在需要该接口的代码时,才有意义。是否有代码显示“我真的在这里需要IQueryable”? -
@Dialectus 是的,这就是为什么我想知道 IEnumerable 是否是一个更好的选择。
-
要回答您想知道的问题,人们必须知道是否存在尖叫“我真的需要
IQueryable就在这里”的代码。只有你自己知道,所以只有你自己可以回答自己的问题。如果没有这样的代码,那就通过简化界面来减轻负担。
标签: c# interface ienumerable iqueryable