C#LINQ,如果找不到(时间),请选择上一个/复制上一个结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#LINQ,如果找不到(时间),请选择上一个/复制上一个结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1360字,纯文字阅读大概需要2分钟。
内容图文
![C#LINQ,如果找不到(时间),请选择上一个/复制上一个结果](/upload/InfoBanner/zyjiaocheng/669/179bb946c28745b78f6417bb081a6eff.jpg)
假设我有一个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;
}
现在使用LINQ和GroupBy,我将所有结果按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
});
这只是一点帮助,我想您需要修改代码以使其与您的代码一起使用. AND:我猜还有更多高效的方法
内容总结
以上是互联网集市为您收集整理的C#LINQ,如果找不到(时间),请选择上一个/复制上一个结果全部内容,希望文章能够帮你解决C#LINQ,如果找不到(时间),请选择上一个/复制上一个结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。