我正在尝试返回一个List,但是我遇到了以下列表的问题
我使用了以下lambda表达式来生成字符串列表
var lstItems = rows.SelectMany(x => x).ToList();
注意:'rows'是一种链接列表,即 LinqToExcel.Query.ExcelQueryable<'LinqToExcel.Row'>
输入列表如下:
rows cell
[0] ------[0] {"myValue1"}
[1] {1}
[2] {"abc"}
[1] ------[0] {"myValue2"}
[1] {1}
[2] {"pqr"}
[2] ------[0] {"myValue3"}
[1] {5}
[2] {"ppp"}
and so on..
结果列表预期如下
List<string> lstItems = [0] - {"myValue1"}
[1] - {1}
[2] - {"abc"}
[3] - {"myValue2"}
[4] - {1}
[5] - {"pqr"}
[6] - {"myValue3"}
[7] - {5}
[8] - {"ppp"}
结果列表是要在一个列表中合并的所有行的单元格值,它应该在给定的输入行 - 单元格顺序中。
我可以通过以下代码实现所需的输出:
List<string> lstExcelData = new List<string>();
foreach (LinqToExcel.Row row in rows)
{
foreach (LinqToExcel.Cell cell in row)
{
lstExcelData.Add(cell.Value.ToString().Trim());
}
}
但是如果可能的话,lambda表达式要好得多,因为我总是喜欢使用lambda表达式进行迭代。
答案 0 :(得分:1)
为了对你说实话,我从未使用LinqToExcel
所以我不知道里面的类,属性等所以请不要低估这个答案。 :)提供反馈,如果可能的话,我会尽力改进。
List<string> lstExcelData = new List<string>();
lstExcelData = rows.SelectMany(row => row.Select(cell => cell.Cast<string>())).ToList();
希望这有帮助。
答案 1 :(得分:0)
你可以试试这个:
var lstItems = rows.Select((row,index) => new {
Cells = row.Select(x => x.ToString())
.ToList(),
RowIndex = index
}).ToList();
这为您提供了所有具有单元格值的行,例如,您可以像这样访问第三个Cell
的第二个Row
值:
var value = lstItems[2].Cells[1];