使用 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。
- Id:1 Date:11/1 已选择: false
- Id:2 Date:12/1 已选择: false
- Id:3 Date:13/1 已选择: true
- Id:4 Date:14/1 已选择: true
您可以使用 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
。
不过您在排序时需要小心 - 您几乎假设有一堆未选择的会议,然后是选定的会议。
您可以使用 TakeWhile
和 LastOrDefault
。
Meetings.TakeWhile(m => !m.Selected).LastOrDefault()
我需要根据以下场景编写 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。
- Id:1 Date:11/1 已选择: false
- Id:2 Date:12/1 已选择: false
- Id:3 Date:13/1 已选择: true
- Id:4 Date:14/1 已选择: true
您可以使用 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
。
不过您在排序时需要小心 - 您几乎假设有一堆未选择的会议,然后是选定的会议。
您可以使用 TakeWhile
和 LastOrDefault
。
Meetings.TakeWhile(m => !m.Selected).LastOrDefault()