我试图通过平均成绩命令不被零除:避免除排序依据
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