Linq没有返回正确的结果

本文关键字:结果 返回 Linq | 更新日期: 2023-09-27 18:11:40

我需要用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

Linq没有返回正确的结果

看起来像是整数除法问题。将其中一个数字转换为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,