我的 .csv 格式为 -
Group No,Group Name,Type,Class,Category,Description,Product,Quantity,Stock,Id,Name
1,B,X,Y,Table,Wooden Table,Table,12,50,123,XYZ
我正在尝试使用以下 LINQ 读取此 .csv -
var data = lines
.Select((line, index) => new { Line = line, Index = index + 1 }) // capture line number
.Skip(1) // skip header
.Select(x => x.Line.Split(',').Select(field => field.Trim()).ToArray()
.Select(fields => new {
grpNo = fields[0],
product = fields[6],
Qty = fields[7],
stock = fields[8],
ID = fields[9],
Name = fields[10],
LineIndex = x.Index
})).ToList();
问题是这个 LINQ 没有给我任何结果。我一步一步调试了这个 LINQ,所以我发现到这一部分为止我的 LINQ 运行正常,我可以看到数据 -
var data = lines
.Select((line, index) => new { Line = line, Index = index + 1 }) // capture line number
.Skip(1) // skip header
.Select(x => x.Line.Split(',').Select(field => field.Trim()).ToArray()
但当我添加以下部分时 -
Select(fields => new {
grpNo = fields[0],
product = fields[6],
Qty = fields[7],
stock = fields[8],
ID = fields[9],
Name = fields[10],
LineIndex = x.Index
})).ToList();
它什么也没给我。经过调试,我发现在数据变量中,它说,index out of bounds of the array
但是我重新检查了一下,我知道我对每个字段都使用了正确的索引号。
我甚至删除了所有内容并检查 grpNo = fields[0]
,它给了我相同的消息“索引超出范围”。
请提出建议。谢谢!
最后一个子句中括号用错了,所以造成了问题。从结构上看,处理 CSV 文件的查询看起来没问题。
您的最终
Select()
调用针对的是单个行,而不是您解析的行集。我明白您为什么这样做,因为您需要访问索引。但您只需要先采取中间步骤来构建行并包含索引,然后将字段放入其预期名称中。