I\'ve seen this question posted here previously but I\'m not satisfied that I understand the complete ramifications. The problem is what return type should a data layer that
You should always return an interface rather than a concrete type, this goes without saying as it specifies the behaviour allowed without tying the consumer to a specific implementation.
In terms of which interface to return, you should think about the purpose of the method and the intentions of the caller. If you return a collection, should the caller be able to alter the collection? e.g. add/remove items? if all they need to do is enumerate it (do a foreach) then you should just return an IEnumerable.