Linq orderby没有按预期工作

时间:2016-03-16 13:10:28

标签: c# linq

我试图从数据库中获取数据,但我没有得到预期的结果。

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。我需要纠正吗?

2 个答案:

答案 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)

如果为空,则默认优先级为高数。