Django REST Framework - ListSerializer - Actualizaciones Múltiples

Imagen
 Se muestra un ejemplo, de como realizar la implementación de Múltiples actualizaciones en una sola petición , es decir enviando una lista de objetos, y usando la clase ListSerializer  realizamos las actualizaciones (inserciones u eliminaciones). El modelo para el ejemplo La Vista      def   post ( self ,  request ):          """ Ejemplo de manejo de listas en Serializer                     Para este ejemplo asumimos lo siguiente:           Se tienen que enviar todos los datos existentes de los empleados en el JSON ya que           se comparara con la base de datos y :            1.- Si se encuentran se actualizan los datos,            2.- Si no existen en la base de datos  se crean,            3.- Si se encuentran en la base de datos, pero no fueron pasados en el JSON se elimnan.          """          # Obtener el  JSON.          data  =  request .data          # Obtener los datos de la base de datos                  emp  =  Employes . objects . all ()   

Agrupación en Linq, con varias Columnas (GroupBy).

La primera vez que intente realizar una operación de agrupación en Linq con varios campos, tuve ciertos problemas en entender la sintaxis de GroupBy , pero con una visita a MSDN me creo más confusión jejeje.

Para explicar el uso de Group By con varias columnas, os dejo  el siguiente ejemplo.

Usaremos la estructura de la siguiente Tabla de empleados.

EmpleadoId
Empleado
EmpresaId
DeptoId
1
Fry
1
A
2
Bender Bending
2
A
3
Hubert 
1
B
4
Dr. Zoidberg
2
A
5
Turanga Leela
1
A


Si quisiéramos devolver las agrupaciones por EmpresaId, y DeptoId, tendremos como resultado:

EmpresaID
DeptoId
TotalEmpleadosPorDepto
1
A
2
1
B
1
2
A
2

En Sql Seria algo como:

SELECT EmpresaID,DeptoID,COUNT(DeptoID) AS TotalEmpleadosPorDepto
FROM empleados
GROUP BY EmpresaId,DeptoID



En Linq:

var rows = from item in TablaEmpleado.AsEnumerable()
           group item by
                   new
                       {
                          Empresa = item["EmpresaID"].ToString(),
                          Departamento = item["DeptoId"].ToString()
                        }
           into g
              select new
                       {
                         EmpresaId = g.Key.Empresa,
                         DepartamentoId = g.Key.CentroCosto,
                         TotalEmpleados = g.Count())
                       };

En el fragmento de codigo de Linq, Tenemos que TablaEmpleado es un DataTable No Tipado,
fijarse que para el uso de múltiples columnas es necesario crear un objeto con las columnas a agrupar en mi caso fueron EmpresaId, Depto ID, esto es según la siguiente definición del Objeto GroupBy

public static IEnumerable GroupBy
   
 (this IEnumerable source, Func keySelector,
    
 Func, TResult> resultSelector);

Espero haber sido claro y que esto les sea de alguna utilidad.

Comentarios

  1. Buen tip. Ahora bien, intenta quitando la ultima columna que es el contador de registros y prueba mostrando los registros de los grupos.

    ResponderEliminar
  2. El resultado únicamente mostrará las dos columnas
    EmpresaID y DeptoId sin ningún inconveniente.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Django. [Errno 10013] Intento de Acceso a un Socket no Permitido por sus permisos de acceso.

Crystal Reports para VS2010. El Texto Restante no parece se parte de la Formula.

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)