使用linq或其他C#函数展平列表列表

时间:2012-11-27 14:24:02

标签: c# .net linq

我有一个班级:

    public class ChartData
    {        
      public Decimal? Value { get; set; }        
      public DateTime Date { get; set; }        
    }

我也有

    List<List<ChartData>> chartData = List<List<ChartData>>();

chartData可以包含任意数量的List,它可以是一个,但也可以是十个列表。

我需要将这种结构弄平。例如,如果我在chartData中有两个列表,我需要获取每个对象包含字段的对象列表:

    {
      Decimal? Value0
      Decimal? Value1
      DateTime Date
    }

如果我有十个列表,我需要获取每个对象包含字段的对象列表:

    {
      Decimal? Value0
      Decimal? Value1
      .
      .
      .
      Decimal? Value9
      DateTime Date
    }

是否可以使用linq或其他C#函数来实现?

提前致谢。

2 个答案:

答案 0 :(得分:3)

如果chartData确实可以包含任何数量的列表,那么您就不幸了,因为您无法在.NET类中动态创建字段。必须在编译时知道类的确切结构,即使它是匿名类。

您可以考虑使用

{
    List<Decimal?> Values,
    DateTime Date
}

{
    Decimal?[] Values,
    DateTime Date
}

相反,它们都可以通过LINQ轻松创建。如果你详细说明为什么你需要将它们作为单独的字段(可能是某种序列化要求?如果是,哪种格式?),SO社区可能会建议替代解决方案。此外,您应指定应使用哪个 Date 值,如果它们不同。

答案 1 :(得分:1)

您可以使用4.0版中引入的C#的动态可能性。

请参阅此SO article on property bags

但请注意,您丢失了任何编译时检查!在你这样做之前考虑两次。