由于我刚刚开始使用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();
如果底部没有空行,此查询效果很好,但如果底部有空行则抛出错误。我的问题是我怎么能只拆分那些写有东西或不是空白的行。
答案 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 { ... })