使用 LINQ 表达式从 collection 中获取前一个元素

Using LINQ expression to get previous element from a collection

我需要根据以下场景编写 LINQ 表达式:

public class Meeting
{
   public int Id { get; set; }
   public DateTime Date { get; set; }
   public bool Selected { get; set; }    
}

List<Meeting> Meetings

使用 LINQ 表达式,如何检索在第一个被选中之前发生的会议?

例如,在下面的列表中,我需要检索会议 ID 2。

您可以使用 TakeWhile and LastOrDefault:

var meeting = Meetings.TakeWhile(m => !m.Selected)
                      .LastOrDefault();

if (meeting != null) 
{
    // Use the meeting
}
else
{
    // The first meeting was selected, or there are no meetings
}

TakeWhile 基本上在遇到第一个与谓词不匹配的项目时停止 - 换句话说,它就像提前停止的 Where

不过您在排序时需要小心 - 您几乎假设有一堆未选择的会议,然后是选定的会议。

您可以使用 TakeWhileLastOrDefault

Meetings.TakeWhile(m => !m.Selected).LastOrDefault()