2015-09-07 2 views
-1

мне нужно, чтобы получить процент с запросом Linq, но он не работает, я попытался с разных вещей, как следоватьLinq не возвращает правильный результат

var format = "dd/MM/yyyy"; 

var actualTime = DateTime.ParseExact(DateTime.Today.ToString(format, CultureInfo.InvariantCulture), format, CultureInfo.InvariantCulture); 

List<RelacionEjecucionPendientes> iniciativasEjecucionPendienteses = actividades 
      .GroupBy(cl => cl.iniciativaName) 
      .Select(cl => new RelacionEjecucionPendientes 
      { 
       Nombre = cl.Key, 
       ATiempoEjecucionCantidad = cl.Count(c => c.estado != "No Iniciada" && (Convert.ToDateTime(c.fechaVencimiento).Day - actualTime.Day) >= 0), 
       ATiempoEjecucionPorcentaje = 
        ((cl.Count(c => c.estado != "No Iniciada" && Convert.ToDateTime(c.fechaVencimiento).Day - actualTime.Day >= 0)/
        (cl.Count(c => c.estado != "No Iniciada") != 0 ? cl.Count(c => c.estado != "No Iniciada") : 1))) 
        * 100, 
       DesfazadasEjecucionCantidad = cl.Count(c => c.estado != "No Iniciada" && (Convert.ToDateTime(c.fechaVencimiento).Day - actualTime.Day) < 0), 
       DesfazadasEjecucionPorcentaje = String.Format("{0:0.00}", 
        ((cl.Count(c => c.estado != "No Iniciada" && ((Convert.ToDateTime(c.fechaVencimiento).Day - actualTime.Day) < 0))/
        (cl.Count(c => c.estado != "No Iniciada") != 0 ? cl.Count(c => c.estado != "No Iniciada") : 1))) 
        * 100), 
       ATiempoPendientesCantidad = cl.Count(c => c.estado == "No Iniciada" && (Convert.ToDateTime(c.fechaInicio).Day - actualTime.Day) >= 0), 
       ATiempoPendientesPorcentaje = 
        ((cl.Count(c => c.estado == "No Iniciada" && ((Convert.ToDateTime(c.fechaInicio) - actualTime).Days >= 0))/
        (cl.Count(c => c.estado == "No Iniciada") != 0 ? cl.Count(c => c.estado == "No Iniciada") : 1))) 
        * 100, 
       DesfazadasPendientesCantidad = cl.Count(c => c.estado == "No Iniciada" && (Convert.ToDateTime(c.fechaInicio).Day - actualTime.Day) < 0), 
       DesfazadasPendientesPorcentaje = String.Format("{0:0.00}", 
        ((cl.Count(c => c.estado == "No Iniciada" && (Convert.ToDateTime(c.fechaInicio).Day - actualTime.Day) < 0)/
        (cl.Count(c => c.estado == "No Iniciada") != 0 ? cl.Count(c => c.estado == "No Iniciada") : 1))) 
        * 100) 
      }).ToList(); 

Любой из этого процент работы правильно

ATiempoEjecucionPorcentaje
DesfazadasEjecucionPorcentaje
ATiempoPendientesPorcentaje
DesfazadasPendientesPorcentaje

Но это, кажется, работает нормально:

ATiempoEjecucionCantidad
DesfazadasEjecucionCantidad
ATiempoPendientesCantidad
DesfazadasPendientesCantidad

ответ

1

Похоже задачи целочисленного деления. Введите одно из чисел: double, чтобы заставить его работать:

ATiempoEjecucionPorcentaje = 
    (((double)cl.Count(c => c.estado != "No Iniciada" && Convert.ToDateTime(c.fechaVencimiento).Day - actualTime.Day >= 0)/
    (cl.Count(c => c.estado != "No Iniciada") != 0 ? cl.Count(c => c.estado != "No Iniciada") : 1))) 
    * 100, 
Смежные вопросы