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

本文关键字:字段 第二个 排序 第一个 如果 | 更新日期: 2023-09-27 17:59:32

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

select *
from meetings
order by ISNULL(ActualStartDate, StartDate) desc

到目前为止,我尝试过这个,但似乎不起作用:

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

更新:

事实上这是正确的。问题出在显示该项目的列表视图上。抱歉。

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

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

我怀疑你想要:

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

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

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

您缺少StartDate:的"m"

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

其他答案是正确的,但您也可以使用这种方式。

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