在.net应用程序中使用基于存储库的持久性时,通常应该使用哪种集合类型?
IList,IEnumerable?
例如,FindAll()方法。
答案 0 :(得分:2)
取决于。
IEnumerable<T>
最小化调用代码和存储库实现之间的耦合。但是所有进一步的处理(例如分类)都必须在过程中完成。IQueryable<T>
允许添加进一步的操作,这可能(取决于存储库实现)在底层数据存储上执行。由于您可以在其中任何一个之间轻松转换(有一个AsQueryable
扩展方法,允许将IEnumerable<T>
转换为IQueryable<T>
进行输入,但当然处理仍然是在记忆中完成。)
就个人而言,我喜欢IQueryable<T>
给出的潜在好处,即使非基于LINQ的存储库现在可能无法从中受益。另一方面YAGTNI。
答案 1 :(得分:1)
对于只读集合,您可以使用ReadOnlyCollection<T>
。通过使用LINQ,可以在其他类型上获得FindAll
提供的List
功能。
答案 2 :(得分:1)
我总是使用IEnumerable,因为它是最小的返回类型,所以你不给客户端他不需要的东西