我試圖通過平均成績命令不被零除:避免除排序依據
var articles = (from f in DB.faqs
orderby f.scoreCount/f.scoreSum descending
select new Article(f.ID, f.question, f.scoreSum, f.scoreCount))
.Take(wantedItems);
有沒有辦法在LINQ實現這一目標?
我試圖通過平均成績命令不被零除:避免除排序依據
var articles = (from f in DB.faqs
orderby f.scoreCount/f.scoreSum descending
select new Article(f.ID, f.question, f.scoreSum, f.scoreCount))
.Take(wantedItems);
有沒有辦法在LINQ實現這一目標?
我想您是零得分物品進行到底:
orderby f.scoreSum == 0 ? 0 : f.scoreCount/f.scoreSum descending
這是行不通的?
orderby (f.scoreSum != 0) ? f.scoreCount/f.scoreSum : 0.0 descending
分數不能爲浮點數(它們不會被零除),所以不應該編譯。 – harold
試着在分割之前檢查0。
var articles = (from f in DB.faqs
orderby f.scoreSum == 0 ? 0 : f.scoreCount/f.scoreSum descending
select new Article(f.ID, f.question, f.scoreSum, f.scoreCount))
.Take(wantedItems);
var articles = (from f in DB.faqs
orderby f.scoreSum!=0? (f.scoreCount/f.scoreSum) : 0 descending
select new Article(f.ID, f.question, f.scoreSum, f.scoreCount))
.Take(wantedItems);
f.scoreSum != 0 ? f.scoreSum : 1
並非專用LINQ:
f.scoreSum == 0 ? (f.scoreCount < 0 ? int.MinValue : int.MaxValue) : f.scoreCount/f.scoreSum
如果不爲零,它會進行正常的分工。如果爲零,它將採用最接近整數的正確無窮大(如果您使用的是浮點數,您將獲得最接近的整數),所以int.MinValue表示結果爲負無窮,int.MaxValue表示結果爲正值無窮。
注意:0/0也會導致「儘可能接近正無窮大」,如果這還不行,您可以添加另一個嵌套三元組......或者僅過濾出0/0個案例,因爲0/0 isn反正任何地方都無法分類。
假設您不需要scoreSum爲0(無效記錄?)的記錄,而不是執行Orderby子句中的所有計算,請嘗試在where子句中添加一個篩選器,因爲應該減少tablescans並提高性能。
var articles = (from f in DB.faqs
where f.scoreSum != 0
orderby f.scoreCount/f.scoreSum descending
select new Article(f.ID, f.question, f.scoreSum, f.scoreCount))
.Take(wantedItems);
也許加上'那裏f.scoreSum> 0' :) – Reniuz
你嘗試用在哪裏? http://msdn.microsoft.com/en-us/library/bb311043.aspx – wiero
「orderby(f.scoreSum == 0?0:f.scoreCount/f.scoreSum)descending」? – ivan