我试图按平均分数排序而不是除以零:
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中实现这个目标?
答案 0 :(得分:4)
我想你最终想要零分文章:
orderby f.scoreSum == 0 ? 0 : f.scoreCount / f.scoreSum descending
答案 1 :(得分:3)
这有用吗?
orderby (f.scoreSum != 0) ? f.scoreCount / f.scoreSum : 0.0 descending
答案 2 :(得分: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不是'无论如何,无论如何都可以排序。
答案 3 :(得分:0)
在进行除法之前,请尝试检查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);
答案 4 :(得分:0)
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);
答案 5 :(得分:0)
f.scoreSum != 0 ? f.scoreSum : 1
答案 6 :(得分:0)
假设您不需要scoreSum为0的记录(无效记录?),而不是在Orderby子句中进行所有计算,请尝试在where子句中添加过滤器,因为这样可以减少表扫描和提高绩效。
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);