从CSV导入时如何使用linq忽略空行。

时间:2014-04-26 06:50:08

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

由于我刚刚开始使用linq,这个问题可能会被认为是noob

我有一个场景,我必须导入远程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();

如果底部没有空行,此查询效果很好,但如果底部有空行则抛出错误。我的问题是我怎么能只拆分那些写有东西或不是空白的行。

2 个答案:

答案 0 :(得分:3)

在查询中添加Where子句:

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

答案 1 :(得分:1)

添加非空白检查:

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 { ... })