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

时间:2015-01-30 14:55:32

标签: c# linq

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

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

List<Meeting> Meetings

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

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

  • Id:1日期:11/1选中:false
  • Id:2日期:12/1选中:false
  • Id:3日期:13/1已选中: true
  • Id:4日期:14/1选中: true

2 个答案:

答案 0 :(得分: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
}

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

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

答案 1 :(得分:4)

您可以使用TakeWhileLastOrDefault

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