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

时间:2014-04-23 06:03:19

标签: 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和StartDate都为null并且我希望它最后显示。但那是我猜的一个单独的问题。

3 个答案:

答案 0 :(得分:2)

我怀疑你想要:

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

请注意,调用该方法不会更改meetings - 您需要使用返回值,该返回值将是排序的结果序列。 (这与LINQ的工作方式一致。)

如果仍然不起作用,并且假设这是LINQ to SQL或类似的东西,你应该查看生成的SQL来计算出发生了什么...然后你可以尝试调整你的查询是否适当。

答案 1 :(得分:1)

其他答案是正确的,但你也可以这样使用。

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

答案 2 :(得分:1)

你错过了" m。"对于StartDate:

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