I have been doing some work on a site and have come to the point of the BLL and DAL of the site. I had many ideas of how to do it and I have listened to many discussions about it on architecture lists and then I talked to my buddy Aaron Zupancic about this and found a post that he pointed me to about these things. This goes into the concept of using a delegate in the BLL to call into the DAL with the delegate to get the data out of a reader or whatever and the delegate will return the type, by either using a concrete type or a generic type.
I have not ever done this, but it is simplifying my code and I think it is an elegant solution as he indicates. Just thought I would point to his insight.