Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LINQ表达式中按属性划分属性_C#_Asp.net_Asp.net Mvc_Linq_Asp.net Mvc 5 - Fatal编程技术网

C# 在LINQ表达式中按属性划分属性

C# 在LINQ表达式中按属性划分属性,c#,asp.net,asp.net-mvc,linq,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Linq,Asp.net Mvc 5,我编写了如下代码: Session["priceRange"] = ranges.Select(r => new PriceRangeGraph { Price = Math.Round(r, 2), Sales = lista.Where(x => ranges.FirstOrDefault(y => y >= x.SalePrice) == r).Sum(x => x.SaleNumber), SuccessfulSellers =

我编写了如下代码:

Session["priceRange"] = ranges.Select(r => new PriceRangeGraph
{
     Price = Math.Round(r, 2),
     Sales = lista.Where(x => ranges.FirstOrDefault(y => y >= x.SalePrice) == r).Sum(x => x.SaleNumber),
     SuccessfulSellers = lista.GroupBy(x => x.StoreName).Where(x => ranges.FirstOrDefault(y => y >= x.Select(z => z.SalePrice).FirstOrDefault()) == r && x.Select(h => h.SaleNumber).FirstOrDefault() > 0).Count(),
     UnSuccessfulSellers = lista.GroupBy(x => x.StoreName).Where(x => ranges.FirstOrDefault(y => y >= x.Select(z => z.SalePrice).FirstOrDefault()) == r && x.Select(h => h.SaleNumber).FirstOrDefault() == 0).Count(),
}).ToList();
其作用如下:

  • 查找给定范围内的所有销售
  • 查找在给定范围内进行销售的卖家数量
  • 查找在给定范围内没有进行任何销售的卖家数量
现在,我想获得成功的销售通过率的卖家有销售和那些没有。我的做法是:

(thoseWhoHadSales/(thoseWhoHadSales+thoseWhoDidnt))*100;
在这里,我可以在给定的价格范围内为卖家成功销售

现在我感到困惑的是,确实/可能发生的例外情况:

Divide by zero exception... If those who had sales is equal to = 0;
对于我来说,现在最简单的方法是什么,来执行上面的公式。我是否可以在select语句中立即执行此操作

如果给定价格范围内的销售额为=0,我只需将销售额设置为0

有人能帮我吗

斯蒂芬,你的意思是这样的:

public double SellThroughRate
{
    get { return SellThroughRate; }
    set
    {
        if (SuccessfulSellers != 0)
        {
            SellThroughRate = Math.Round((SuccessfulSellers / (SuccessfulSellers + UnSuccessfulSellers)) * 100,2);
        }
        else
        {
            SellThroughRate = 0;
        }
    }
}
double.IsNaN()
可以作为检查等于零条件的替代方法

double tempResult = Math.Round(((double)SuccessfulSellers / ((double)SuccessfulSellers + (double)UnSuccessfulSellers)) * 100,2);
SellThroughRate = double.IsNaN(tempResult) ? 0 : tempResult;
希望有帮助,

double.IsNaN()可以作为检查等于零条件的替代方案

double tempResult = Math.Round(((double)SuccessfulSellers / ((double)SuccessfulSellers + (double)UnSuccessfulSellers)) * 100,2);
SellThroughRate = double.IsNaN(tempResult) ? 0 : tempResult;

希望有帮助,

将您的属性设置为只读,并有条件地检查
成功卖家+失败卖家
是否为零以防止出现异常。我还建议您按原样存储结果,并使用
[DisplayFormat]
属性在视图中显示格式化结果

[DisplayFormat(DataFormatString = "{0:P2}")]
public double SellThroughRate
{
    get
    {
        double total = SuccessfulSellers + UnSuccessfulSeller;
        return total  == 0 ? 0 : SuccessfulSellers / total;
    }
};

将您的属性设置为只读,并有条件地检查
SuccessfulSellers+UnSuccessfulSellers
是否为零以防止出现异常。我还建议您按原样存储结果,并使用
[DisplayFormat]
属性在视图中显示格式化结果

[DisplayFormat(DataFormatString = "{0:P2}")]
public double SellThroughRate
{
    get
    {
        double total = SuccessfulSellers + UnSuccessfulSeller;
        return total  == 0 ? 0 : SuccessfulSellers / total;
    }
};

有人吗在您的模型中有一个属性进行计算(仅getter)并测试
成功卖家
+
未成功卖家
等于
0
SellThrough属性,而我不想要它,这难道不更容易吗=DNo我只是指一个只读程序-
public double SellThroughRate{get{return successfullsellers+unsuccessfullsellers==0?0:Math.Round((successfullsellers/(successfullsellers+unsuccessfullsellers))*100,2;}实际上,我在看你的难读的
.GroupBy()
子句,我想你可以简化一下。但我需要一些睡眠,所以需要等到早上:)有人吗?=)在您的模型中有一个属性进行计算(仅getter)并测试
成功卖家
+
未成功卖家
等于
0
SellThrough属性,而我不想要它,这难道不更容易吗=DNo我只是指一个只读程序-
public double SellThroughRate{get{return successfullsellers+unsuccessfullsellers==0?0:Math.Round((successfullsellers/(successfullsellers+unsuccessfullsellers))*100,2;}实际上,我在看你的难读的
.GroupBy()
子句,我想你可以简化一下。但是我需要一些睡眠,所以需要等到早上:)OP没有显示,但是
.Count()
查询表明
成功的卖家
未成功的卖家
int
,在这种情况下你需要一个cast-
…Math.Round((双精度)SuccessfulSellers/..
OP没有显示它,但是
.Count()
查询建议
SuccessfulSellers
SuccessfulSellers
int
,在这种情况下,您需要一个cast-
…Math.Round((双精度)SuccessfulSellers/…
我再次查看了您的查询,因为它看起来有点奇怪。但我发现您已经询问过了:)A是的,顺便说一句,Stephen,结果是我不得不将SaleNumber放入groupby语句中,然后将它放入where语句中,比如x=>x.Key.SaleNumber==0或x.Key.SaleNumber>0,这样我就可以检查谁实际有销售,谁没有销售,我再次查看了你的查询,因为它看起来有点奇怪。但我看到你还是问了:)A是的,顺便说一句,Stephen,结果是我必须将SaleNumber放入groupby语句中,然后将它放入where语句中,比如x=>x.Key.SaleNumber==0或x.Key.SaleNumber>0,这样我就可以检查谁实际有销售,谁没有销售