所以我有一个包含数据的列表,在该列表中有一个集合,在该集合中还有另一个集合。
棘手的部分是最后一个集合应该与第一个列表一起显示。
举个例子,这个列表包含一个房子的集合和一些更多的信息。房屋的集合有一个名称和一系列房间。 最后,房间的集合有一个名字。
现在我要打印一张这样的表格;
房子
房间名称
房间名称 ..
房子
。 。
只使用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();
}
这就是我现在所拥有的。
答案 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));