簡體   English   中英

在LINQ表達式中按屬性划分屬性

[英]Divding property by property in LINQ expression

我寫了如下代碼:

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;

希望有幫助,

將您的屬性設置為只讀,並有條件地檢查SuccessfulSellers + UnSuccessfulSellers是否為零,以防止出現異常。 我還建議您按原樣存儲結果,並使用[DisplayFormat]屬性在視圖中顯示格式化的結果

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM