选择列表列表中的对象

时间:2014-12-31 22:39:26

标签: c# linq

这高于我在Linq的技术水平,所以我来这里寻求帮助。这段代码有效,但我认为它可以运行得更快,占用更少的空间。

private List<DateTime> GetUniqueTimeStamps()
{
    List<DateTime> timeStamps = new List<DateTime>();

    foreach (KeyValuePair<string, Instrument> kvp in Instruments)
    {
        foreach (Bar bar in kvp.Value.Bars)
        {
            timeStamps.Add(bar.Time);
        }
    }

    return timeStamps.Distinct().ToList();
}

如何使用linq跳过所有循环并跳转对象属性以获取唯一的DateTime值?

1 个答案:

答案 0 :(得分:2)

使用SelectMany展平列表,然后Select获取时间:

Instruments.SelectMany(kvp => kvp.Value.Bars).Select(b => b.Time).Distinct().ToList();

请注意,这并不是更有效率(由于ToList,您甚至没有利用延迟枚举)。然而,它更短,更容易阅读。