public ListaPaginada <TProyeccion> Listar <TEntidad, TKey, TProyeccion>(Expression <Func <TProyeccion, TKey> > funcProyeccion, Expression <Func <TEntidad, TKey> > funcEntidad, Paginacion paginacion, Expression <Func <TEntidad, bool> > filtroEntidad = null, Expression <Func <TProyeccion, bool> > filtroProyeccion = null) where TEntidad : class where TProyeccion : class { IQueryable <TEntidad> entidades = Set <TEntidad>(); IQueryable <TProyeccion> proyecciones = Set <TProyeccion>(); if (filtroEntidad != null) { entidades = entidades.Where(filtroEntidad); } proyecciones = entidades.Join(proyecciones, funcEntidad, funcProyeccion, (x, y) => y); if (filtroProyeccion != null) { proyecciones = proyecciones.Where(filtroProyeccion); } int itemsTotales = proyecciones.Count(); if (paginacion.OrdenarPor != null) { var selectorOrden = Expresiones.Propiedad <TProyeccion>(paginacion.OrdenarPor); proyecciones = paginacion.DireccionOrden == DirOrden.Asc ? proyecciones.OrderBy(selectorOrden) : proyecciones.OrderByDescending(selectorOrden); } proyecciones = proyecciones.Skip((paginacion.Pagina - 1) * paginacion.ItemsPorPagina).Take(paginacion.ItemsPorPagina); return(new ListaPaginada <TProyeccion>(proyecciones.ToList(), paginacion.Pagina, paginacion.ItemsPorPagina, itemsTotales)); }
private ListaPaginada <TDto> ObtenerListaPaginada <TEntidad, TDto>(Paginacion paginacion, IQueryable <TEntidad> lista) { if (paginacion.OrdenarPor != null && lista != null) { var selectorOrden = Expresiones.Propiedad <TEntidad>(paginacion.OrdenarPor); lista = paginacion.DireccionOrden == DirOrden.Asc ? lista.OrderBy(selectorOrden) : lista.OrderByDescending(selectorOrden); } var itemsTotales = 0; if (lista != null) { itemsTotales = lista.Count(); lista = lista.Skip((paginacion.Pagina - 1) * paginacion.ItemsPorPagina).Take(paginacion.ItemsPorPagina); } var listaPaginada = new ListaPaginada <TEntidad>(lista.ToList(), paginacion.Pagina, paginacion.ItemsPorPagina, itemsTotales); return(conversor.ConvertirListaPaginada <TEntidad, TDto>(listaPaginada)); }
public ListaPaginada <TProyeccion> Listar <TEntidad, TProyeccion>(Expression <Func <TEntidad, TProyeccion> > proyeccion, Expression <Func <TEntidad, bool> > filtro, Paginacion paginacion) where TEntidad : class { IQueryable <TEntidad> entidades = Set <TEntidad>(); if (filtro != null) { entidades = entidades.Where(filtro); } var resultados = entidades.Select(proyeccion); int itemsTotales = resultados.Count(); if (paginacion.OrdenarPor != null) { var selectorOrden = Expresiones.Propiedad <TProyeccion>(paginacion.OrdenarPor); resultados = paginacion.DireccionOrden == DirOrden.Asc ? resultados.OrderBy(selectorOrden) : resultados.OrderByDescending(selectorOrden); } resultados = resultados.Skip((paginacion.Pagina - 1) * paginacion.ItemsPorPagina).Take(paginacion.ItemsPorPagina); return(new ListaPaginada <TProyeccion>(resultados.ToList(), paginacion.Pagina, paginacion.ItemsPorPagina, itemsTotales)); }