列表中的集合中的集合应与列表中的数据一起显示

时间:2016-03-10 13:38:40

标签: c# list

所以我有一个包含数据的列表,在该列表中有一个集合,在该集合中还有另一个集合。

棘手的部分是最后一个集合应该与第一个列表一起显示。

举个例子,这个列表包含一个房子的集合和一些更多的信息。房屋的集合有一个名称和一系列房间。 最后,房间的集合有一个名字。

现在我要打印一张这样的表格;

房子

房间名称

房间名称 ..

房子

。 。

只使用foreach和select语句我觉得这样做不行,我无法改变数据结构,所以我坚持这个。

private byte[] CreateReport(DateTime fromDate, DateTime toDate, List<TotalData> data)
    {
        var reportingHelper = new ReportingHelper();
        reportingHelper.WriteRow("Period", fromDate.ToShortDateString(), toDate.ToShortDateString());
        reportingHelper.InsertEmptyLine();

        foreach (var GroupedByDate in data.GroupBy(x => x.Date.Date).OrderBy(x => x.Key))
        {
            reportingHelper.WriteRow(ordersGroupedByDate.Key.ToShortDateString());
            reportingHelper.WriteHeader(null, "House", "Room", "Name");
            foreach (var grouped in GroupedByDate)
            {
                foreach (var House in  grouped.house)
                {
                    reportingHelper.WriteRow(null,House.housename);
                    foreach (var room in House.rooms)
                    {
                        reportingHelper.WriteRow(null,null,room.name, GroupedByDate.Name);
                    }
                }
            }
        }
        return reportingHelper.ToArray();
    }

这就是我现在所拥有的。

2 个答案:

答案 0 :(得分:0)

使用LINQ:

var result = lstHouses.Select(h => new {h.Name, h.Rooms.SelectMany(r => r.Name)} );

这样,您将输出一个IEnumerable<string, IEnumerable<string>>,其中House名称为键,而Rooms名称列为值。

您可以删除.Name以直接拥有对象。

答案 1 :(得分:0)

您可以使用 Linq ,例如:

  List<House> houses = new List<House>();
  ...

  var lines = houses  
    .SelectMany(house => new String[] {house.Name}
      .Concat(house.Rooms.Select(room => room.Name)));

  Console.Write(String.Join(Environment.NewLine, lines));