我试图从数据库中获取数据,但我没有得到预期的结果。
var totalNews = GetNewsData(false, CmsPagesRepository.CurrentUserSettings.CmsLanguageID)
.OrderBy(n => n.Priority)
.ThenBy(n => n.Index)
.ThenBy(n => n.Title);
我有一个包含列索引和列优先级的新闻表,我想按优先级排序新闻,如果优先级为空,则首先显示优先级和其他优先级。
但是现在如果在totalNews
列表中有3个带有索引(1,4,2)和优先级(null,0,1)的新闻,我就会获得第一个位置,其优先级为null,索引为1。我需要纠正吗?
答案 0 :(得分:8)
虽然你接受的答案会奏效,但我并不喜欢它。首先,如果你有一些最大的整数,它们就不会被正确地排序。一个好的解决方案适用于任何输入,而不仅仅是常见输入。其次,代码与规范不符。您的规范是"首先按优先级是否为空,然后是优先级,然后是......",以便代码应该如何读取。我建议你写一下:
GetNewsData(...)
.OrderBy(n => n.Priority == null) // nulls last
.ThenBy(n => n.Priority)
.ThenBy(n => n.Index)
.ThenBy(n => n.Title);
答案 1 :(得分:2)
您可能希望在OrderBy优先级中进行简单的空检查,如下所示:
.OrderBy(n => n.Priority ?? int.MaxValue)
如果为空,则默认优先级为高数。