Skip to main content
 首页 » 编程设计

c#之使用 LINQ 表达式从集合中获取上一个元素

2024年01月18日32davidwang456

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

public class Meeting 
{ 
   public int Id { get; set; } 
   public DateTime Date { get; set; } 
   public bool Selected { get; set; }     
} 
 
List<Meeting> Meetings 

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

例如,在下面的列表中,我需要检索 session ID 2。
  • 编号:1 日期:11/1 已选择:假
  • 编号:2 日期:12/1 已选择:假
  • 编号:3 日期:13/1 已选择:真实
  • 编号:4 日期:14/1 已选择:真实
  • 请您参考如下方法:

    您可以使用 TakeWhile 和 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换句话说,这会提前停止。

    不过,您需要小心订购 - 您几乎假设有一堆未选定的 session ,然后是选定的 session 。