【问题标题】:Merge linked list in to one list将链表合并为一个列表
【发布时间】:2014-01-31 07:35:28
【问题描述】:

我正在尝试返回一个列表,但在使用以下列表时遇到了问题

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

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

注意:'rows' 是一种链表,即 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<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 表达式进行迭代。

【问题讨论】:

  • 您能否向我们提供一个小样本输入数据以及该数据所需的输出格式?
  • @samar : 修改问题,提到输入输出

标签: c# linked-list lambda


【解决方案1】:

老实说,我从未使用过LinqToExcel,所以我不知道其中的类、属性等,所以请不要对这个答案投反对票。 :) 提供反馈,如果可能,我会尽力改进。

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

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

希望这会有所帮助。

【讨论】:

  • LinqToExcel.Query.ExcelQueryable 不包含“ForEach”的定义,并且没有扩展方法“ForEach”接受“LinqToExcel.Query.ExcelQueryable'。我试图将“行”转换为已知类型,但效果不佳.. :(
  • “LinqToExcel.Row”(即 row )不包含“Cells”的定义,并且找不到接受“LinqToExcel.Row”类型的第一个参数的扩展方法“Cells”
  • :( 抱歉...抛出解析器异常...无法解析表达式'value(LinqToExcel.Query.ExcelQueryable`1[LinqToExcel.Row]).SelectMany(row => row.Select( cell => cell.Cast()))':目前不支持“System.Linq.Queryable.SelectMany”方法的这种重载,但如果需要,您可以注册自己的解析器。
  • 确信您的答案应该适用于真正的链表场景,而不是 LinqToExcel 列表。感谢您的帮助和快速响应。对您的最后一个答案进行投票,而不将其标记为答案。
【解决方案2】:

你可以试试这个:

var lstItems = rows.Select((row,index) => new {
                                          Cells = row.Select(x => x.ToString())
                                                     .ToList(),
                                          RowIndex = index
                                              }).ToList();

这为您提供了具有单元格值的所有行,例如,您可以像这样访问第三个 Row 的第二个 Cell 值:

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

【讨论】:

    猜你喜欢
    • 2014-01-27
    • 2014-05-16
    • 2015-02-22
    • 2015-04-01
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多