如何在linq过滤后保存字典结构

时间:2017-09-10 06:38:01

标签: c# linq dictionary

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这样的简单方法来构建结果?

1 个答案:

答案 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()