2014-04-26 62 views
0

由于我刚刚开始LINQ,这个问题可能被认为是菜鸟如何从CSV导入时忽略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(); 

该查询效果很好时,有没有空行底部,但如果有空白行,在底部抛出错误。我的问题是,我怎样才能分割那些写有东西或不是空白的行。

回答

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

感谢名单进行检查没有。列。 – Ratna

2

添加Where子句查询:

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