检索列表中的上一个索引记录(如果存在)



我使用的是.NET 3.5。我的要求是遍历按日期降序排列的对象列表,找到特定记录的匹配项,捕获该对象,然后,如果记录存在于该日期之前,也就是说捕获对象的索引减一(如果存在),也捕获该对象,这意味着我的输出列表可以有一条记录,也可以有两条记录,这取决于是否有以前的日期记录。有没有一种干净的方法来实现这一点?

我尝试捕获匹配记录的索引,并通过在索引中添加-1来查找上一个索引>>如果上一个元素不存在,则存在索引越界异常的风险。

如何避免索引超出绑定异常,同时检查前一个元素的存在(如果存在)?我相信有一种比我尝试的方法更干净的方法。因此,如果有更好的方法,我会向你寻求建议。。。。

如有任何建议,不胜感激。谢谢

看看下面的内容。对象只是一个日期超时集,但应该说明LINQ查询。你正在寻找。顶部(2)(如果你需要按某种方式分组,这可能会更复杂):

下面是LinqPad示例,但应该很容易粘贴到控制台应用程序中。

void Main()
{
var threeItems = new List<DateTimeOffset>(new[] { DateTimeOffset.Now, DateTimeOffset.Now.AddDays(-1), DateTimeOffset.Now.AddDays(-2) });
var twoItems = new List<DateTimeOffset>(new[] { DateTimeOffset.Now, DateTimeOffset.Now.AddDays(-1) });
var oneItem = new List<DateTimeOffset>(new[] { DateTimeOffset.Now });
ShowItems(GetItems(threeItems));
ShowItems(GetItems(twoItems));
ShowItems(GetItems(oneItem));
}
IEnumerable<DateTimeOffset> GetItems(List<DateTimeOffset> items)
{
return items
.OrderByDescending(i => i)
.Select(i => i)
.Take(2);
}
void ShowItems(IEnumerable<DateTimeOffset> items)
{
Console.WriteLine("List of Items:");
foreach (var item in items)
{
Console.WriteLine(item);
}
}

我认为您要查找的内容需要使用List.IndexOf来查找匹配项的索引,然后如果在您搜索的日期之前有日期时间,则检索上一个项。我在这里的例子使用了一个名为listObject的对象,它包含日期时间和其他属性;

DateTime searchDate = DateTime.Parse("26/01/2019");
var orderedList = listObjects.OrderBy(x => x.DateProperty).ToList();
listObject matchingItem = orderedList.First(x => x.DateProperty.Date == searchDate.Date);   //gets the first matching date
listObject previousMatching = orderedList.Any(x => x.DateProperty.Date < searchDate.Date) ? orderedList[orderedList.IndexOf(matchingItem) - 1] : null;  //returns previous if existing, else returns null

相关内容

  • 没有找到相关文章

最新更新