gpt4 book ai didi

c# - Linq 生成给定日期范围内缺失记录的列表

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:13 24 4
gpt4 key购买 nike

假设我有以下类的列表:

public class Holding
{
public string HoldingId{ get; set; }
public DateTime date { get; set; }
}

在给定的日期范围内,每一天都需要持有。我需要能够生成该范围内缺失的 Assets list 。

假设我有以下数据需要在 2010 年 6 月 1 日至 2010 年 6 月 5 日期间检查:

HoldingId Date
1 01-06-2010
1 02-06-2010
1 04-06-2010
2 02-06-2010
2 03-06-2010
2 05-06-2010
3 03-06-2010

对于这组数据,缺失的 Assets 是:

HoldingId Date
1 03-06-2010
1 05-06-2010
2 01-06-2010
2 04-06-2010
3 01-06-2010
3 02-06-2010
3 04-06-2010
3 05-06-2010

我使用以下问题的答案生成了日期列表范围: Find missing dates for a given range .

我不太明白如何从这里继续前进...我假设我需要按 HoldingId 分组以生成日期数组,然后执行 range.Except(holdings.dates) 或其他操作达到这个效果。

有没有人使用 Linq 对这个问题有很好的解决方案?

最佳答案

你对应该如何做是完全正确的;这是我得到的;

List<Holding> holdings = new List<Holding>();
holdings.Add(new Holding(){ date=Convert.ToDateTime("01-06-2010"), HoldingId = "1" });
holdings.Add(new Holding(){ date=Convert.ToDateTime("02-06-2010"), HoldingId = "1" });
holdings.Add(new Holding(){ date=Convert.ToDateTime("04-06-2010"), HoldingId = "1" });
holdings.Add(new Holding(){ date=Convert.ToDateTime("02-06-2010"), HoldingId = "2" });
holdings.Add(new Holding(){ date=Convert.ToDateTime("03-06-2010"), HoldingId = "2" });
holdings.Add(new Holding(){ date=Convert.ToDateTime("05-06-2010"), HoldingId = "2" });
holdings.Add(new Holding(){ date=Convert.ToDateTime("03-06-2010"), HoldingId = "3" });

List<DateTime> dateRange = new List<DateTime>();
dateRange.Add(Convert.ToDateTime("01-06-2010"));
dateRange.Add(Convert.ToDateTime("02-06-2010"));
dateRange.Add(Convert.ToDateTime("03-06-2010"));
dateRange.Add(Convert.ToDateTime("04-06-2010"));
dateRange.Add(Convert.ToDateTime("05-06-2010"));

Dictionary<string, List<DateTime>> missingHoldings = new Dictionary<string, List<DateTime>>();

foreach(var holdGrp in holdings.GroupBy (h => h.HoldingId))
{
var missingDates = dateRange.Except(holdGrp.Select(h => h.date)).ToList();
missingHoldings.Add(holdGrp.Key, missingDates);
}

关于c# - Linq 生成给定日期范围内缺失记录的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11755478/

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