2014-04-26 58 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...