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