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

Bro*_*ato 1 c# linq

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

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

List<Meeting> Meetings
Run Code Online (Sandbox Code Playgroud)

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

例如,在下面的liste中,我需要检索会议ID 2.

  • Id:1日期:11/1选择:false
  • Id:2日期:12/1选择:false
  • Id:3日期:13/1选择:是的
  • Id:4日期:14/1选择:true

Jon*_*eet 6

你可以使用TakeWhileLastOrDefault:

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
}
Run Code Online (Sandbox Code Playgroud)

TakeWhile当它碰到与谓词不匹配的第一个项目时基本上会停止 - Where换句话说就像是早期停止的那个项目.

你需要小心订购 - 你几乎假设有一堆未经选择的会议,其次是选定的会议.