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

时间:2014-01-31 07:35:28

标签: c# linked-list lambda

我正在尝试返回一个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表达式进行迭代。

2 个答案:

答案 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];