如何从对象集合中获取第二个最新日期的对象
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 我更新了我的答案以上是关于如何从对象集合中获取第二个最新日期的对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Firebase Firestore 中获取内部集合