linq 选择最接近父日期的子日期

k2fxgqgv  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(89)

拾取子对象作为父对象的规则:
1.父级可以有0到任意数量的子级
1.子支付日期始终小于父日期
1.打开任何父项时,子项日期必须最接近父项日期,例如:如果我选择批次#2(2023年4月28日),预期子记录仅为2023年4月27日,尽管其他子记录适用,但不应选择,因为父记录存在于#1 2023年4月26日

如何使用C# LINQ方法?感谢你的时间和价值你的建议。谢谢你

zpqajqem

zpqajqem1#

您必须对父节点进行排序,并创建包含每个父节点和下一个父节点的元组。然后,对于每个范围,您必须找到此范围内的所有付款(running example):

var parents = new[]
{
    new DateOnly(2023, 4, 26),
    new DateOnly(2023, 4, 28),
    new DateOnly(2023, 4, 18),
};

var childs = new[]
{
    new DateOnly(2023, 4, 22),
    new DateOnly(2023, 4, 25),
    new DateOnly(2023, 4, 27),
    new DateOnly(2023, 4, 17),
    new DateOnly(2023, 4, 21),
};

var parentsOrdered = parents.OrderDescending().Append(DateOnly.MinValue);
var payments = parentsOrdered
    .Zip(parentsOrdered.Skip(1), (batch, limit) => (batch, limit))
    .Select(range => (range.batch, childs: childs.Where(child => range.limit < child && child < range.batch)));

foreach (var payment in payments)
{
    Console.WriteLine($"Batch: {payment.batch}");
    foreach (var child in payment.childs)
    {
        Console.WriteLine($"   {child}");
    }
}

相关问题