使用LINQ从分组行中获取值

时间:2010-12-17 17:18:29

标签: c# asp.net linq

我有以下课程:

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就可以了。

2 个答案:

答案 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()