我正在处理一个复杂的对象。该对象具有类型public List<ExcelDataRow> DataRows
的列表属性
ExcelDataRow对象具有public Dictionary<string,string> Cells
属性,这是一个字典。
我的目标是使用group by或self join根据单元格字典中的值对excel数据行进行分组。
这是保存excel数据的类结构:
public class ExcelData
{
public ExcelStatus Status { get; set; }
public Columns ColumnConfigurations { get; set; }
public List<string> Headers { get; set; }
public List<ExcelDataRow> DataRows { get; set; }
public string SheetName { get; set; }
public ExcelData()
{
Status = new ExcelStatus();
Headers = new List<string>();
DataRows = new List<ExcelDataRow>();
}
public class ExcelDataRow
{
public int RowIndex { get; set; }
public Dictionary<string,string> Cells { get; set; }
public ExcelDataRow()
{
this.Cells = new Dictionary<string, string>();
}
}
}
这是我正在处理的示例excel表:
Alias List 1 A Y N English
Alias List 1 B Y N English
Alias List 1 C Y N English
Alias List 1 D Y N English
Alias List 2 E Y Y English
Alias List 2 F Y N English
Alias List 2 G Y N English
所以在上面的示例中,我想按第一列分组,即A列最后有两组Alias List 1
和Alias List 2
。
我已经编写了这段代码,但我仍然得到了相同的7行。
var rows = sheet.DataRows
.GroupBy(r => r.Cells
.Where(c => c.Key.Length == 2 && c.Key.StartsWith("A"))
.Select(c => c.Value))
.ToList();
我的目标是获取两个按第一列名称分组的数据行列表,如果这是可以使用任何方法获取的,请随时提供建议。
感谢
答案 0 :(得分:3)
您正在选择单元格列表而不是单个单元格。这会使GroupBy
混淆。
请改为尝试:
sheet.DataRows.GroupBy(r => r.Cells["A" + r.RowIndex]);
请注意,使用RowIndex
修复了超过10行的错误,其中长度为3,而不是2。