You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C# LINQ方法实现父日期对应最接近的子日期匹配?

用C# LINQ实现父项匹配最接近的子项日期

定义实体类

先根据业务场景定义父项和子项的基础结构(可按需调整属性):

public class Parent
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
}

public class Child
{
    public int Id { get; set; }
    public DateTime PaymentDate { get; set; }
    public int ParentId { get; set; } // 关联父项的外键字段
}

LINQ实现逻辑

假设你已获取父项集合parents和子项集合children,通过以下代码即可为每个父项匹配最接近的子项:

var parentWithClosestChild = parents.Select(parent => new
{
    ParentInfo = parent,
    ClosestChild = children
        // 筛选属于当前父项且付款日期早于父项日期的子项
        .Where(child => child.ParentId == parent.Id && child.PaymentDate < parent.Date)
        // 按付款日期倒序排序,最接近父项日期的子项会排在首位
        .OrderByDescending(child => child.PaymentDate)
        // 取第一个符合条件的子项,无匹配项则返回null
        .FirstOrDefault()
});

逻辑说明

  1. 遍历每个父项,单独处理对应子项的匹配逻辑
  2. 通过Where筛选满足两个核心条件的子项:属于当前父项、付款日期早于父项日期
  3. 利用OrderByDescending按子项付款日期倒序排列,确保最接近父项日期的子项处于结果集第一位
  4. FirstOrDefault返回排序后的首个子项,无符合条件的子项时返回null,适配父项可拥有0个子项的规则

对应你提到的示例:父项批次#2日期为2023年4月28日,其下子项包含2023年4月27日和2023年4月26日的记录,排序后2023年4月27日的子项会被选中,完全符合预期。

内容的提问来源于stack exchange,提问作者Arjun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 22:37:52