在LINQ中需要用1替换0吗?

时间:2016-03-17 06:46:23

标签: c# linq

让value2 = Grp.Count(x => x.Column1< = 2&& x.Column2 ==" studentName")* 100 / Grp.Count(x => x.Column2 ==" studentName")

在这里,Bold有时为零,它给我无穷大,如果值为零,我想用1替换它。

2 个答案:

答案 0 :(得分:0)

使用C#扩展程序,您可以执行以下操作。将此类添加到命名空间中。

 public static class DataFormatter
 {
    public static int CheckForZero(this int value)
    {                                
       return value == 0? 1 : value;
    }
 }

然后你就可以做到这一点。

 let value2 = Grp.Count(x => x.Column1 <= 2 && x.Column2== "studentName") * 100 / 
   Grp.Count(x => x.Column2== "studentName").CheckForZero(); //add this check

否则你可以使用下面常用的三元运算符。

 var initialCount = Grp.Count(x => x.Column2== "studentName");
 var refinedCount = initialCount == 0?  1: initialCount;

答案 1 :(得分:0)

使用外部变量或者如果你不介意性能命中,只需使用带三元运算符的Any()。如果谓词匹配至少一个值,Linq的Any将返回true,所以如果找到匹配,它将找到计数。否则它将在分母中返回1。

let value2 = Grp.Count(x => x.Column1 <= 2 && x.Column2== "studentName") * 100 / (Grp.Any(x => x.Column2 == "studentName") ? Grp.Count(x => x.Column2== "studentName") : 1)

使用外部变量如下所示:

let valueStudentName = Grp.Count(x => x.Column2== "studentName") 
let value2 = Grp.Count(x => x.Column1 <= 2 && x.Column2== "studentName") * 100 / valueStudentName != 0 ? valueStudentName : 1