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 ()   

Does not recognize the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression.


Al intentar obtener el valor máximo usando Linq,de un campo varchar, pero que  únicamente estaba  guardando datos de tipo numérico,  usaba la siguiente línea de código:

var item = db.catContribuyentes.OrderByDescending(m =>m.Clave).FirstOrDefault();

Posteriormente me di cuenta que esta no funciona correctamente para obtener el ultimo valor  (máximo), ya que trata todo como cadena. Intentando realizar la conversión a un tipo entero:

var item = db.catContribuyentes.OrderByDescending(m => int.Parse( m.Clave)).FirstOrDefault();

Arrojaba el siguiente error de conversíon: “the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression.

Esto porque Linq, no  puede convertir los tipos dentro de la expresión de consulta, para esto es necesario traer primero los datos y posteriormente ordenarlo algo como:

var item = db.catContribuyentes.ToArray().OrderByDescending(m => int.Parse( m.Clave)).FirstOrDefault();

El gran inconveniente como habrán observado, es que  trae todos los datos en memoria y posteriormente se ordena. Esto dispara demasiado el tiempo de consulta, ya que trae todos los datos.



Al final de cuentas, utilice el clásico MAX de sql , sin Linq :(.

Si hay alguna idea para la optimización, se agradecerá.


Se me olvidaba comentar que el tipo del campo clave tiene que ser de tipo cadena.

Comentarios

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)