【问题标题】:How to ignore blank lines with linq when importing from CSV.从 CSV 导入时如何使用 linq 忽略空白行。
【发布时间】:2014-04-26 06:50:07
【问题描述】:

由于我刚开始linq,问题可能会被认为是菜鸟

我有一个场景,我必须导入远程 csv 并在数据库中更新它。

以前我使用的是传统方法,即逐行拆分和更新。

我写的查询如下

var WItems = 
    ( from ln in File.ReadAllLines(FilePath).Skip(1)
    let columns = ln.Split(',')
    select new
    {
        Style = Convert.ToString(columns[0].Trim()),
        UPC = Convert.ToString(columns[1].Trim()),
        Description = Convert.ToString(columns[2].Trim()),
        FabricContent = Convert.ToString(columns[3].Trim()),
        CareInstruction = Convert.ToString(columns[4].Trim()),
        Color = Convert.ToString(columns[5]),
        Size = Convert.ToString(columns[6].Trim()),
        Price = Convert.ToString(columns[7].Trim()),
        Category = Convert.ToString(columns[8].Trim()),
        SubCategory = Convert.ToString(columns[9].Trim()),
        Stock = Convert.ToString(columns[10].Trim()),

    } ).ToList();

当底部没有空行时,此查询运行良好,但如果底部有空行,则抛出错误。我的问题是我怎样才能只拆分那些有文字或非空白的行。

【问题讨论】:

    标签: c# asp.net .net linq csv


    【解决方案1】:

    Where 子句添加到您的查询中:

    from ln in File.ReadAllLines(FilePath)
               .Skip(1)
               .Where(s => !string.IsNullOrWhiteSpace(s))
               // further code...
    

    【讨论】:

      【解决方案2】:

      添加非空检查:

      var WItems = (from ln in File.ReadAllLines(FilePath)
          .Skip(1)
          .Where(item => !String.IsNullOrWhiteSpace(item))
          let columns = ln.Split(',')
          select new { ... }).ToList()
      

      替代方案 - 检查 columns 是否真的包含 11 个项目:

      File.ReadAllLines(FilePath).Skip(1)
          .Select(item => item.Split(','))
          .Where(cols => cols.Count() == 11).Select(columns => new { ... })
      

      【讨论】:

      • 感谢您检查没有。列数。
      猜你喜欢
      • 2020-04-05
      • 2012-01-15
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      相关资源
      最近更新 更多