gpt4 book ai didi

C# LINQ,如果没有找到(时间),选择上一个/复制上一个结果

转载 作者:行者123 更新时间:2023-11-30 15:54:44 25 4
gpt4 key购买 nike

假设我有一个 List<Type>和一个 Type具有以下属性:

public DateTime OriginalDateTime { get; set; }
public double RoundedTime { get; }
public int MyValue { get; set; }

那个类包含一个构造函数:

public Match(DateTimeOffset dateTime, int bid, int ask, int volume)
{
DateTime = dateTime;
RoundedTime = Math.Round(Math.Ceiling(dateTime.ToTimeStamp() / 60) * 60); // Round to nearest minute
Bid = bid;
Ask = ask;
Volume = volume;
}

现在使用 LINQGroupBy我得到所有按 RoundedTime 分组的结果.没问题,但是,我想检查是否每分钟都有一个结果(因此对于一个小时的数据,GroupBy 应该返回 60 个结果)。

最好是,当 LINQ 中缺少一分钟时结果,我想使用以前的值(假设缺少第 30 分钟,用第 29 分钟的数据填充)。

现在我想知道这是否有可能用 LINQ 实现.

最佳答案

我猜你想实现这个:

IEnumerable<IGrouping<int, MyType>> mygrouping = new List<MyType>().GroupBy(x => x.Key); // this is your grouped list

var allData = Enumerable.Range(0, 60) // here you take 60 values (0-59)
.Select(
actualKey =>
{
var p = mygrouping.SingleOrDefault(y => y.Key == actualKey);
int counter = actualKey;
while (p == null && counter >= 0) // as long as the value is null and the counter is greater or equal to 0
p = mygrouping.SingleOrDefault(y => y.Key == counter--);
return new KeyValuePair<int, IEnumerable<MyType>>(actualKey, p.Select(v => v)); // return the data of the last value
});

这只是一点点帮助,我想您需要修改代码以使其适用于您的代码。并且:我猜还有更多高效的方法

关于C# LINQ,如果没有找到(时间),选择上一个/复制上一个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49671885/

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