如何用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() });
逻辑说明
- 遍历每个父项,单独处理对应子项的匹配逻辑
- 通过
Where筛选满足两个核心条件的子项:属于当前父项、付款日期早于父项日期 - 利用
OrderByDescending按子项付款日期倒序排列,确保最接近父项日期的子项处于结果集第一位 FirstOrDefault返回排序后的首个子项,无符合条件的子项时返回null,适配父项可拥有0个子项的规则
对应你提到的示例:父项批次#2日期为2023年4月28日,其下子项包含2023年4月27日和2023年4月26日的记录,排序后2023年4月27日的子项会被选中,完全符合预期。
内容的提问来源于stack exchange,提问作者Arjun
相关产品推荐
相关产品推荐

