Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq orderby未按预期工作_C#_Linq - Fatal编程技术网

C# Linq orderby未按预期工作

C# Linq orderby未按预期工作,c#,linq,C#,Linq,我试图从数据库中获取数据,但没有得到预期的结果 var totalNews = GetNewsData(false, CmsPagesRepository.CurrentUserSettings.CmsLanguageID) .OrderBy(n => n.Priority) .ThenBy(n => n.Index) .ThenBy(n => n.Title); 我有一个带有列索引和列优先级

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

var totalNews = GetNewsData(false, CmsPagesRepository.CurrentUserSettings.CmsLanguageID)
              .OrderBy(n => n.Priority)
              .ThenBy(n => n.Index)
              .ThenBy(n => n.Title);
我有一个带有列索引和列优先级的新闻表,我想按优先级对新闻排序,如果优先级为null,则首先显示具有优先级的新闻,然后显示其他新闻。
但是现在,如果a在
totalNews
列表中有3条索引为(1,4,2)且优先级为(null,0,1)的新闻,那么我将位于第一个位置,即优先级为null且索引为1的新闻。我必须更正什么?

您可能需要在OrderBy优先级中进行简单的空检查,如下所示:

.OrderBy(n => n.Priority ?? int.MaxValue)

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

虽然您接受的答案可以,但我不太喜欢它。首先,在不太可能的情况下,其中有一些最大的整数,它们将不能正确地相对于null排序。一个好的解决方案适用于任何输入,而不仅仅是普通输入。其次,代码与规范不匹配。您的规范是“先按优先级是否为null排序,然后按优先级排序,然后按…”,所以代码应该这样读取。我建议你写:

GetNewsData(...)
  .OrderBy(n => n.Priority == null) // nulls last
  .ThenBy(n => n.Priority)
  .ThenBy(n => n.Index)
  .ThenBy(n => n.Title);

这可以更简洁地写成
n.Priority??99
,尽管我不建议使用那样的硬编码“高值”