Thanks everybody for all your help! I've been able to create a generic method to convert a Stored Procedure to a collection:
public EntityCollection ConvertStoredProcedureToCollection<EntityObject, EntityCollection>(IRetrievalQuery query, Transaction transactionManager)
where EntityObject : EntityBase, new()
where EntityCollection : EntityCollectionBase<EntityObject>, new()
{
EntityObject entityObject = new EntityObject();
EntityCollection entityCollection = new EntityCollection();
IEntityFields entityFields = entityObject.Fields;
using (query)
{
TypedListDAO dao = new TypedListDAO();
using (IDataReader reader = dao.GetAsDataReader(transactionManager, query, CommandBehavior.CloseConnection))
{
List<IDataValueProjector> valueProjectors = new List<IDataValueProjector>(entityFields.Count);
foreach (EntityField entityField in entityFields)
{
valueProjectors.Add(new DataValueProjector(entityField.Alias, entityField.FieldIndex, entityField.DataType));
}
DataProjectorToIEntityCollection projector = new DataProjectorToIEntityCollection(entityCollection);
dao.GetAsProjection(valueProjectors, projector, reader);
reader.Close();
}
}
return entityCollection;
}
Now if you want to convert a Stored Procedure to a collection all you have to do is:
UmbracoProductCollection umbracoProductCollection = ConvertStoredProcedureToCollection<UmbracoProductEntity, UmbracoProductCollection>(RetrievalProcedures.GetSpDigiGetRecursiveUmbracoProductsCallAsQuery(productGroupCode), null);
If people like this code it can be added to DbUtils class of LLBLGen.