我有以下课程:
public class MySeat
{
public string Section { get; set; }
public string Row { get; set; }
public string Seat {get; set; }
}
我想通过Section和Row对座位列表进行分组,以便我可以制作逗号分隔的座位列表。
var groupedSeats = seats.GroupBy(x => new { x.Section, x.Row });
foreach (var group in groupedSeats)
{
htmlWriter.Write(group.Key.Section);
List<string> seatNumbers = new List<string>();
foreach (var seat in group)
seatNumbers.Add(seat.Seat);
htmlWriter.Write(string.Join(@", ", seatNumbers.ToArray()));
}
使用LINQ有更好的方法吗?
这只是我正在尝试清理的代码的一小部分,我很好奇是否有更好的方法来获取显示的座位号而不是创建列表,循环遍历组然后执行一个string.Join
就可以了。
答案 0 :(得分:2)
这是一个直接构建所有字符串的查询,将“数据构造”与“处理构造”分开:
var data = from grp in seats.GroupBy(x => new { x.Section, x.Row })
let groupSeats = grp.Select(s => s.Seat).ToArray()
select new {
grp.Key.Section,
SeatNumbers = String.Join(@", ", groupSeats);
foreach (var d in data)
{
htmlWriter.Write(d.Section);
htmlWriter.Write(d.SeatNumbers);
}
答案 1 :(得分:1)
你正在尝试写
group.Select(s => s.Seat).ToArray()