首页 > 解决方案 > 过滤列表并获取一个额外的元素

问题描述

class xyz
{
DateTime TimeStamp;
String a;
}

我有一个列表,我需要使用 where 子句对其进行过滤,但还需要一个前一个元素。例子

listVariable.OrderBy(x=>x.TimeStamp).Where(x => x.Timestamp >= 
StartDateTime.LocalDateTime && x.Timestamp < 
EndDateTime.LocalDateTime).ToList();

我需要满足上述条件的项目,并且我还需要一个额外的前一个元素(即满足此条件之前的元素 x => x.Timestamp >= StartDateTime.LocalDateTime)。我怎样才能做到这一点?

例如:该列表包含诸如 '09/11/2018'
'10/11/2018' '15/11/2018' '18/11/2018' '21/11/2018' '25/11/2018'等元素

如果我查询 18-20 之间的日期。我应该得到 '15/11/2018' -> 前一个额外元素 '18/11/2018' '20/11/2018' -> 这些是满足 where(...) 条件的元素。

标签: c#linq

解决方案


您可以创建两个集合,然后将它们合并:

var list1 = listVariable.OrderBy(x=>x.TimeStamp).Where(x => x.Timestamp >= 
                                         StartDateTime.LocalDateTime && x.Timestamp < 
                                         EndDateTime.LocalDateTime).ToList();
var minItem = list1.Min(x=>x.TimeStamp);

var list2 = listVariable.Where(x.Timestamp < minItem.LocalDateTime).OrderBy(x=>x.TimeStamp).First();

var finalList = list.Concat(list2);

推荐阅读