拾取子对象作为父对象的规则:1.父级可以有0到任意数量的子级1.子支付日期始终小于父日期1.打开任何父项时,子项日期必须最接近父项日期,例如:如果我选择批次#2(2023年4月28日),预期子记录仅为2023年4月27日,尽管其他子记录适用,但不应选择,因为父记录存在于#1 2023年4月26日
如何使用C# LINQ方法?感谢你的时间和价值你的建议。谢谢你
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}"); } }
1条答案
按热度按时间zpqajqem1#
您必须对父节点进行排序,并创建包含每个父节点和下一个父节点的元组。然后,对于每个范围,您必须找到此范围内的所有付款(running example):