public virtual IList <TEntry> Get(Func <IQueryable <TEntry>, IList <TEntry> > delegateExpr, GetEntityMode getTypes) { if (delegateExpr == null) { throw new ArgumentNullException(nameof(delegateExpr)); } var repositoryQuery = RepositoryFactory.GetRepository <TRepository>().GetQueryable(); return(GetInternal(repositoryQuery, delegateExpr, getTypes)); }
public virtual IList <TEntry> GetInternal(IQueryable <TEntry> repositoryQuery, Func <IQueryable <TEntry>, IList <TEntry> > delegateExpr, GetEntityMode getTypes) { List <TEntry> result = null; switch (getTypes) { case GetEntityMode.NotDeletedAndNotVersion: result = delegateExpr(repositoryQuery).ToList(); break; case GetEntityMode.Deleted: try { RepositoryFactory.DisableDeletedFilter(); repositoryQuery = repositoryQuery.Where("IsDeleted"); result = delegateExpr(repositoryQuery).ToList(); } finally { RepositoryFactory.EnableDeletedFilter(); } break; case GetEntityMode.DeletedAndOther: try { RepositoryFactory.DisableDeletedFilter(); result = delegateExpr(repositoryQuery).ToList(); } finally { RepositoryFactory.EnableDeletedFilter(); } break; case GetEntityMode.Version: try { RepositoryFactory.DisableVersionsFilter(); repositoryQuery = repositoryQuery.Where("IsVersion"); result = delegateExpr(repositoryQuery).ToList(); } finally { RepositoryFactory.EnableVersionsFilter(); } break; case GetEntityMode.VersionAndOther: try { RepositoryFactory.DisableVersionsFilter(); result = delegateExpr(repositoryQuery).ToList(); } finally { RepositoryFactory.EnableVersionsFilter(); } break; case GetEntityMode.VersionAndDeleted: try { RepositoryFactory.DisableVersionsFilter(); RepositoryFactory.DisableDeletedFilter(); repositoryQuery = repositoryQuery.Where("IsVersion", "IsDeleted"); result = delegateExpr(repositoryQuery).ToList(); } finally { RepositoryFactory.EnableVersionsFilter(); RepositoryFactory.EnableDeletedFilter(); } break; case GetEntityMode.DeletedAndVersionAndOther: try { RepositoryFactory.DisableVersionsFilter(); RepositoryFactory.DisableDeletedFilter(); result = delegateExpr(repositoryQuery.Where("IsVersion", "IsDeleted")).ToList(); } finally { RepositoryFactory.EnableVersionsFilter(); RepositoryFactory.EnableDeletedFilter(); if (result != null) { result.AddRange(delegateExpr(repositoryQuery)); } else { result = delegateExpr(repositoryQuery).ToList(); } } break; } return(result); }