Linq没有返回正确的结果

时间:2015-09-07 20:18:36

标签: c# 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 个答案:

答案 0 :(得分: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,