.net - List、IList、IEnumerable、IQueryable、ICollection,哪个返回类型最灵活?

标签 .net linq-to-sql architecture collections

我之前已经在这里看到过这个问题,但我不满意我理解的完整后果。问题是使用 linq-to-sql 返回的数据层应该使用什么返回类型以获得最大的灵 active 和查询能力。这是我读过/发现的内容:

  1. IEnumerable 是有限的,仅允许向前读操作。 IEnumerable 是最通用的。我发现 IEnumerable 确实允许查询操作与扩展语法。

  2. 由于插入操作,列表提供了最大的灵 active 。

  3. 应使用集合而不是列表来启用只读集合。

  4. IQueryable 永远不应该被使用,它应该被“使用并关闭”。 IQueryable 不返回列表,而是生成数据库的查询语法。

我觉得我对权衡有了更好的感觉,但仍然不确定一些事情:

  1. 为什么我要选择接口(interface)变体而不是具体类型?即 IList 或 ICollection 与 List 或 Collection。我会得到什么好处?

  2. 我看到扩展操作可以工作,但是扩展的查询语法也可以工作吗?

  3. 之前有人建议我使用 AsQueryable() 。但是,如果我没有连接到数据库,为什么要这样做呢?看来扩展方法无论如何都能工作。

最佳答案

集合通常对于 DAL 返回不是很有用,因为集合不能隐式保证顺序。这只是一桶元素。另一方面,IList 确实隐式保证顺序。所以我们只剩下 IEnumerable 或 IList。下一个问题是:List 对象是“事件的”吗?即,它是否连接到数据支持,以便当您将项目添加到 IList 时,它将反射(reflect)在数据库中?对于 LINQ-to-SQL,情况并非如此。相反,您应该将实体附加到表中。因此,除非您提供额外的接线,否则列表是多余的。坚持使用 IEnumerable。

关于.net - List、IList、IEnumerable、IQueryable、ICollection,哪个返回类型最灵活?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559868/

相关文章:

.net - 门户中的 Azure 应用服务应用设置不会覆盖 appsettings.json 值

.net - c# dll绑定(bind)到不同版本

mysql - 如何按两个 id 对 linq 查询进行分组

c# - 记录 ASP.NET MVC 应用程序中的用户事件

wordpress - 什么是好的 WordPress 插件架构?

c# - 如何从 DataTable 向 Excel 添加其他工作表

c# - 实现一个非常基本的 IDisposable

c# - Linq 帮助 - Sql trace 返回结果,但 datacontext 返回 null

c# - ADO.NET Entity Framework 是否具有类似于 LINQ to SQL 的 GetTable<T> 的结构?

architecture - 用于 build /设计房屋的开源软件?