我确实在网上查看了EF Repository模式的常见实现。 然后我带来了这样的问题。例如,如果我有这样的方法:
public IEnumerable<Entity> FindEntity(Expression<Func<Entity, bool> where) {...}
如果我有这样的情况,我需要IList而不是IEnumarable
我可以根据我的IEnumerable FindEntity实现创建IList
IList<Entity> myList = new List<Entity>(FindEntity(x = x => x.Date == inputDate));
然后我可能在myList实例中具有IList接口(Count等等)的所有优点。
这种做法是不是很好,或者可能有更好的方法 IEnumerable到IList或作为一个选项我可能在Repository中有其他方法默认返回IList,例如
public IList<Entity> FindEntity(Expression<Func<Entity, bool> where) {....}
在这种情况下,我可能会删除IEnumerable FindEntity实现,因为我可能只是在需要时将IList转换为IEnumerable,或者我可以同时避免任何强制转换。
还有一个问题: 为什么常见的Repository实现实践只有IEnumerable而不是IList,应该有解释呢?或者只是个人偏好?
是的我明白IEnumerable比IList更轻,但无论如何有很多情况下我们需要IList而不是IEnumerable而且在这种方法中我们需要将IEnumerable转换为IList不是吗?
答案 0 :(得分:0)
我认为这是一个选择。 IEnumerable是集合的最小公分母。您也可以预先编写linq语句。层中较高的ICollection或Ilist暴露了您可能不想允许的更多功能,例如向集合添加内容,删除类似的内容。