C# 如果第一个字段为空,则按第二个字段排序

C# 如果第一个字段为空,则按第二个字段排序,c#,linq,sql-order-by,C#,Linq,Sql Order By,如何在C#linq/lambda查询中转换此值 select * from meetings order by ISNULL(ActualStartDate, StartDate) desc 到目前为止,我试过这个,但似乎不起作用: meetings.OrderByDescending(m => m.ActualStartDate ?? m.StartDate); 更新: 其实这是对的。问题出在显示该项的listview上。抱歉 实际上,我真正的问题是,当ActualStartDate

如何在C#linq/lambda查询中转换此值

select *
from meetings
order by ISNULL(ActualStartDate, StartDate) desc
到目前为止,我试过这个,但似乎不起作用:

meetings.OrderByDescending(m => m.ActualStartDate ?? m.StartDate);
更新:

其实这是对的。问题出在显示该项的listview上。抱歉


实际上,我真正的问题是,当ActualStartDate和StartDate都为null时,我希望它最后显示。但我想这是一个单独的问题。

其他人的答案是正确的,但你也可以用这种方式

 var meetings = meetings.OrderByDescending(p => p.ActualStartDate.HasValue)
                .ThenBy(p => p.StartDate)

其他答案是正确的,但你也可以用这种方法

 var meetings = meetings.OrderByDescending(p => p.ActualStartDate.HasValue)
                .ThenBy(p => p.StartDate)
我怀疑你想要:

var sorted =  meetings.OrderByDescending(m => m.ActualStartDate ?? m.StartDate);
请注意,调用该方法不会改变会议——您需要使用返回值,返回值将是结果的排序序列。(这与LINQ的一般工作方式一致。)

如果这仍然不起作用,并且假设这是LINQtoSQL或类似的东西,您应该查看生成的SQL以了解发生了什么。。。然后您可以尝试适当地调整查询。

我想您需要:

var sorted =  meetings.OrderByDescending(m => m.ActualStartDate ?? m.StartDate);
请注意,调用该方法不会改变会议——您需要使用返回值,返回值将是结果的排序序列。(这与LINQ的一般工作方式一致。)

如果这仍然不起作用,并且假设这是LINQtoSQL或类似的东西,您应该查看生成的SQL以了解发生了什么。。。然后您可以尝试适当地调整查询。

您缺少起始日期的“m”:

meetings.OrderByDescending(m => m.ActualStartDate ?? m.StartDate);
您缺少起始日期的“m”:

meetings.OrderByDescending(m => m.ActualStartDate ?? m.StartDate);

“似乎不起作用”并没有告诉我们出了什么问题。编译时错误?未分类的数据?还有别的吗?请仔细考虑,当你张贴和提供所有适当的上下文。我的意思是,它没有排序的方式,我期望。刚刚测试过,它是怎么分类的?你真的只是把它当作一种声明吗?(我的回答解释了只调用
OrderByDescending
不会改变任何东西-您需要使用返回值。)您是否在测试/调试之前具体化排序结果?这是LINQ到SQL吗?EF?还有别的吗?您的输入是什么,实际输出是什么,预期输出是什么?请阅读“似乎不起作用”一文,它并没有告诉我们出了什么问题。编译时错误?未分类的数据?还有别的吗?请仔细考虑,当你张贴和提供所有适当的上下文。我的意思是,它没有排序的方式,我期望。刚刚测试过,它是怎么分类的?你真的只是把它当作一种声明吗?(我的回答解释了只调用
OrderByDescending
不会改变任何东西-您需要使用返回值。)您是否在测试/调试之前具体化排序结果?这是LINQ到SQL吗?EF?还有别的吗?您的输入是什么,实际输出是什么,预期输出是什么?请阅读@lincx:这就是问题的症结所在——当你的帖子包含一个不是真正错误的错误,而你又不告诉我们真正的错误是什么,我们该如何帮助你?我在您提供的代码中发现了两个潜在问题。。。如果没有更多的信息,我就无能为力了。事实上,是listview(我使用kendo mobile listview)在显示已排序的项目时出现了问题,我只是认为这是linq查询。实际上,我真正的问题是当ActualStartDate和StartDate都为空时,我希望它显示在最后。但这是一个单独的问题。@lincx:这就是问题的关键所在,没有在问题中提供足够的信息——当你的帖子包含一个不是真正错误的错误,而你又不告诉我们真正的错误是什么时,我们该如何帮助你?我在您提供的代码中发现了两个潜在问题。。。如果没有更多的信息,我就无能为力了。事实上,是listview(我使用kendo mobile listview)在显示已排序的项目时出现了问题,我只是认为这是linq查询。实际上,我真正的问题是当ActualStartDate和StartDate都为空时,我希望它显示在最后。但这是一个单独的问题。按照@johnskeet多次建议的那样做:meetings=meetings.OrderByDescending(m=>m.ActualStartDate??m.StartDate);按照@johnskeet多次的建议执行此操作:meetings=meetings.OrderByDescending(m=>m.ActualStartDate??m.StartDate);