TIP: reutilizar valor calculado en Linq

En ocasiones para optimizar consultas con datos calculados parciales, tenemos la opción de reutilizarlos mediante sub-expresiones en una sola iteración. En este ejemplo reutilizamos un cálculo (sencillo para el ejemplo), en lugar de realizar el sumatorio o la llamada a una función para cualquier cálculo…

entidad.misDatos.Where(x => x.id(algunID))
    .GroupBy(x => x.otraTabla)
    .Select(m => new miClaseParcial
    {
      id = m.id,
      totalUnidades = m.Sum(x => x.unidades),
      disponible = (m.Sum(x => x.unidades) > m.miTablaConfig.unidades_minimas) ? true : false,
      proximoPedido = (m.miTablaConfig.pedido_minimo - m.Sum(x => x.unidades)),
	    prevision = calcularPrevision(m.Sum(x => x.unidades))
    }).ToList();
					

Generamos una sub-expresión con el valor que reutilizamos:

entidad.misDatos.Where(x => x.id(algunID))
    .GroupBy(x => x.otraTabla)
    .Select(m => new miClaseParcial
    {
      id = m.Key.id,
      totalUnidades = m.Sum(x => x.unidades),
      disponible = false,
      proximoPedido = 0,
	    prevision = 0
    })
    .Select(m => new miClaseParcial
    {
      id = m.id,
      totalUnidades = m.totalUnidades,
      disponible = (m.totalUnidades > m.miTablaConfig.unidades_minimas) ? true : false,
      proximoPedido = (m.miTablaConfig.pedido_minimo - m.totalUnidades),
	    prevision = calcularPrevision(m.totalUnidades)
    }).ToList();
					

Podemos comparar las expresiones generadas y el tiempo de ejecución según el contexto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.