public class MyClass
{
public DateTime Date;
public string Symbol { get; set; }
public decimal Close { get; set; }
}
假设
Dictionary<string, List<MyClass>> A
我希望按Date
为每个Symbol
(最近N天的数据)过滤linq
,但我希望在过滤后保留Dictionary<string, List<MyClass>>
结构。
我能做的就是再次构建Dictionary
Dictionary<string, List<MyClass>> C = new Dictionary<string, List<MyClass>>();
var temData = A.Select(o => o.Value.Where(p => p.Date < today).Take(N)).SelectMany(o => o).GroupBy(o => o.Symbol);
foreach (var item in temData)
{
C.Add(item.Key, item.ToList());
}
是否有像ToDictionary
这样的简单方法来构建结果?
答案 0 :(得分:1)
由于您的原始字典已经由Symbol
“分组”,只需从中投射新字典,但过滤Value
集合:
A = C.ToDictionary(pair => pair.Key,
pair => pair.Value.Where(i => i.Date < today).Take(N).ToList());
请注意,如果您想要N
最近的项目,那么您还需要先订购它们:
pair.Value.Where(i => i.Date < today).OrderByDescending(i => i.Date).Take(N).ToList()