gpt4 book ai didi

c# - Linq 按子集合排序

转载 作者:行者123 更新时间:2023-11-30 20:16:54 24 4
gpt4 key购买 nike

我有一个集合,开始时是从这样的 API 返回的 XML:

<table>
<row id="1">
<field id="date">2017-01-02</field>
<field id="salary">125000</field>
</row>
<row id="2">
<field id="date">2016-01-02</field>
<field id="salary">130000</field>
</row>
</table>

XML 被反序列化为典型的 POCO:

public class Table
{
public Row[] Rows { get;set; }
}

public class Row
{
public Field[] Fields { get;set; }
}

public class Field
{
public string Id { get;set; }
public string Value { get;set; }
}

API 不保证返回行的顺序,我想检索具有最新日期值的行。如果日期是 Row 对象的实际属性,那么我可以使用 https://stackoverflow.com/a/27686805/319980 中所示的技术。 ,(使用 Min LINQ 运算符按 Date 属性对 Table.Rows 集合进行排序)但这似乎不是一个选项在这里,因为日期是子集合的一个值。

假设 date 字段将始终存在,这可以在纯 LINQ 中完成吗?

最佳答案

您可以做的是按日期 进行排序,然后取第一行。要按 date 订购,您应该解析字符串:

var result = table.Rows.OrderByDescending(r => DateTime.ParseExact(
r.Fields.FirstOrDefault(f => f.Id == "date")?.Value ?? DateTime.MinValue.ToString("yyyy-MM-dd"),
"yyyy-MM-dd",
CultureInfo.InvariantCulture)).FirstOrDefault();

一个更健壮的版本可以是对日期使用 TryParse 而不是仅仅解析,并且在失败的情况下返回 DateTime.MinValue 所以行不会被选择

关于c# - Linq 按子集合排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47646434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com