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

How do I get the object with the second latest date from a collection of objects

我有一个对象列表,每个对象都有一个类型为 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",
    
    } 
]

在这个例子中,我想 return 编号为 X66-M1-20/1

的对象

我试图遵循这个Linq: How to get second last

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

试试这个

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

class

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