如何从对象集合中获取第二个最新日期的对象

Posted

技术标签:

【中文标题】如何从对象集合中获取第二个最新日期的对象【英文标题】:How do I get the object with the second latest date from a collection of objects 【发布时间】:2021-11-28 15:30:59 【问题描述】:

我有一个对象列表,每个对象都有一个 DateTime 类型的 AcceptanceDate 属性。

我想检索列表中第二个最晚日期的对象。

有什么办法吗?

[
   
        "number": "X76-M1-20/2",
        "AcceptanceDate": "2020-07-30T00:00:00Z",
        "type": "Done",
    
    ,

    
        "number": "X75-M1-18/2",
        "AcceptanceDate": "2018-03-04T00:00:00Z",
        "type": "Done",
    
    ,
    
        "number": "X66-M1-20/1",
        "AcceptanceDate": "2020-02-12T00:00:00Z",
        "type": "Done",
    
    
    ,
    
        "number": "X77-M1-17/1",
        "AcceptanceDate": "2017-02-14T00:00:00Z",
        "type": "Done",
    
     
]

在此示例中,我想返回带有编号的对象:X66-M1-20/1

我试着关注这个Linq: How to get second last

但在我的情况下它不起作用,因为它是一个对象列表。

【问题讨论】:

你收到list.Count - 1 怎么样?还是list[list.Count - 1] 列表未排序。在这种情况下,我想获得第三个对象,因为它是第一个对象之后的第二个必须最近的对象 【参考方案1】:

试试这个

var jd = JsonConvert.DeserializeObject<List<Data>>(json); 
var item =jd.OrderBy(j =>j.AcceptanceDate ).TakeLast(2).FirstOrDefault();

输出

Number  X66-M1-20/1
AcceptanceDate  2020-02-12
Type    Done

public class Data

    public string Number  get; set; 
    public DateTime AcceptanceDate  get; set; 
    public string Type  get; set; 

更新

由于 PO 想要最后 2 个对象,我可以推荐此代码

var jd = JsonConvert.DeserializeObject<List<Data>>(json); 
var items =jd.Where(i=> i.Type=="Done").OrderBy(j =>j.AcceptanceDate).TakeLast(2).ToList();

if (items!= null && items.Count >=2)

var secondLastItem=items[0];
var lastItem=items[1];

输出

    X66-M1-20/1 2020-02-12  Done  //secondLastItem
    X76-M1-20/2 2020-07-30  Done  //lastItem

【讨论】:

哦,先生,这太好了,只是我有一个问题是否可以通过以下方式获得最后一个和第二个:类型和日期?是否可以添加此条件? @Taieb 一切皆有可能,但我看到的是同一类型。你的意思是? 4个项目?按类型最后两个,按日期最后两个? 我的意思是强制检查最后两个最近的日期并且他们都有类型:完成 @Taieb 我更新了我的答案

以上是关于如何从对象集合中获取第二个最新日期的对象的主要内容,如果未能解决你的问题,请参考以下文章

加入集合的 LINQ 更新

如何在 Firebase Firestore 中获取内部集合

如何将两个firebase集合组合成一个新的对象数组

如何使用 laravel 集合获取最后插入的 ID 并将其插入到第二个表中?

Meteor JS如何从集合中的数组中获取特定对象?

jQuery获取json数据