2015-09-07 140 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,