public IEnumerable <ProjectActivityDto> GetProjectActivity(int projectId, int skip, int take) { var recognisedCategories = new HashSet <string>(new string[] { Constants.ActivityLogCategories.TASK_ADDED, Constants.ActivityLogCategories.MEMBER_ADDED }); IEnumerable <IComposibleProjectActivity> reports = _activityLogService .Select <ActivityLogItem>(item => item, item => recognisedCategories.Contains(item.Category), skip, take) .Select <ActivityLogItem, IComposibleProjectActivity>(item => { switch (item.Category) { case Constants.ActivityLogCategories.TASK_ADDED: return(new TaskAddedReport(item)); case Constants.ActivityLogCategories.MEMBER_ADDED: return(new MemberAddedReport(item)); default: throw new Exception("Unrecognised activity category"); } }); return(reports.Select(report => report.ToProjectActivity(_serviceProvider))); }