C# 将链接列表合并到一个列表中

C# 将链接列表合并到一个列表中,c#,linked-list,lambda,C#,Linked List,Lambda,我正试图返回一个列表,但在下面的列表中遇到了问题 我使用了下面的lambda表达式来生成一个字符串列表 var lstItems = rows.SelectMany(x => x).ToList(); 注意:“行”是一种链表,即,LinqToExcel.Query.ExcelQueryable 输入列表如下: rows cell [0] ------[0] {"myValue1"} [1] {1} [2]

我正试图返回一个列表,但在下面的列表中遇到了问题

我使用了下面的lambda表达式来生成一个字符串列表

      var lstItems = rows.SelectMany(x => x).ToList();

注意:“行”是一种链表,即,LinqToExcel.Query.ExcelQueryable

输入列表如下:

  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 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());
        }
    }
List lstexeldata=newlist();
foreach(行中的LinqToExcel.Row)
{
foreach(行中的LinqToExcel.Cell单元)
{
添加(cell.Value.ToString().Trim());
}
}
但如果可能,使用lambda表达式会更好,因为我总是喜欢使用lambda表达式进行迭代。

您可以尝试以下方法:

var lstItems = rows.Select((row,index) => new {
                                          Cells = row.Select(x => x.ToString())
                                                     .ToList(),
                                          RowIndex = index
                                              }).ToList();
这将为您提供具有单元格值的所有行,例如,您可以访问第三个
行的第二个
单元格
值,如下所示:

var value = lstItems[2].Cells[1];

老实说,我从未使用过
LinqToExcel
,因此我不知道其中的类、属性等,因此请不要否决这个答案。:)提供反馈,如果可能的话,我会努力改进

        List<string> lstExcelData = new List<string>();

        lstExcelData = rows.SelectMany(row => row.Select(cell => cell.Cast<string>())).ToList();
List lstexeldata=newlist();
lstExcelData=rows.SelectMany(row=>row.Select(cell=>cell.Cast()).ToList();

希望这能有所帮助。

你能给我们提供一个小样本输入数据和该数据所需的输出格式吗?@samar:修改了问题,前面提到的输入和输出LinqToExcel.Query.ExcelQueryable不包含“ForEach”的定义,并且找不到接受“LinqToExcel.Query.ExcelQueryable”类型的第一个参数的扩展方法“ForEach”。我试图将“行”强制转换为已知类型,但效果不好..:('LinqToExcel.Row'(即,Row)不包含'Cells'的定义,并且找不到接受'LinqToExcel.Row'类型的第一个参数的扩展方法'Cells':(抱歉…引发解析器异常…无法解析表达式'值(LinqToExcel.Query.ExcelQueryable`1[LinqToExcel.Row])。SelectMany(Row=>Row.Select(cell=>cell.Cast())“:当前不支持“System.Linq.Queryable.SelectMany”方法的此重载,但如果需要,您可以注册自己的解析器。我确信您的答案应该适用于真正的链表场景,而不是LinqToExcel列表。感谢您的帮助和快速响应。请在不将其标记为答案的情况下对您的上一个答案进行投票。”。