我之前已经在这里看到过这个问题,但我不满意我理解的完整后果。问题是使用 linq-to-sql 返回的数据层应该使用什么返回类型以获得最大的灵 active 和查询能力。这是我读过/发现的内容:
IEnumerable 是有限的,仅允许向前读操作。 IEnumerable 是最通用的。我发现 IEnumerable 确实允许查询操作与扩展语法。
由于插入操作,列表提供了最大的灵 active 。
应使用集合而不是列表来启用只读集合。
IQueryable 永远不应该被使用,它应该被“使用并关闭”。 IQueryable 不返回列表,而是生成数据库的查询语法。
我觉得我对权衡有了更好的感觉,但仍然不确定一些事情:
为什么我要选择接口(interface)变体而不是具体类型?即 IList 或 ICollection 与 List 或 Collection。我会得到什么好处?
我看到扩展操作可以工作,但是扩展的查询语法也可以工作吗?
之前有人建议我使用 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/