Meu .csv está no formato -
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
Estou tentando ler este .csv usando o seguinte 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();
A questão é que este LINQ não está me dando nenhum resultado. Depurei este LINQ passo a passo e descobri que até esta parte meu LINQ está funcionando bem e posso ver os dados -
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()
Mas quando incluo a seguinte parte -
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();
isso não me dá nada. Após a depuração, descobri que na variável de dados diz:index out of bounds of the array
Mas verifiquei novamente e sei que estou usando números de índice adequados para cada campo.
Até removi tudo e verifiquei grpNo = fields[0]
, me deu a mesma mensagem "Índice fora dos limites".
Por favor sugira. Obrigado!
Você colocou parênteses na parte errada da última cláusula, então isso está causando problemas. Estruturalmente, sua consulta para processar o arquivo CSV parece correta.
Sua
Select()
chamada final está na linha individual, não no conjunto de linhas que você analisou. Posso ver por que você provavelmente fez isso, você precisava de acesso ao índice. Mas você só precisava primeiro dar o passo intermediário para construir a linha e incluir o índice e, em seguida, colocar os campos nos nomes esperados.