【发布时间】:2017-07-26 07:07:06
【问题描述】:
我写了如下代码:
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;
}
}
}
【问题讨论】:
-
有人吗? =)
-
在你的模型中有一个属性来进行计算(仅限 getter)并测试
SuccessfulSellers+UnSuccessfulSellers是否等于0不是更容易吗 -
SellThrough 属性在上面我想要不? =D
-
不,我只是说只读属性 -
public double SellThroughRate { get { return SuccessfulSellers + UnSuccessfulSellers == 0 ? 0 : Math.Round((SuccessfulSellers / (SuccessfulSellers + UnSuccessfulSellers)) * 100, 2); } }; -
实际上我正在查看您难以阅读的
.GroupBy()子句,我怀疑您可以简化一下。但是我需要睡觉,所以需要等到早上:)
标签: c# asp.net asp.net-mvc linq asp.net-mvc-5