2016-10-05 48 views
0

我试图将CSV解析为Model,但我的IEnumerable始终为空。这段代码有什么问题吗?将CSV解析为模型

private IEnumerable<CandidatesDTO> FileToDto(byte[] file) 
{ 
    System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); 
    IEnumerable<CandidatesDTO> query = null; 
    string[] separators = { ",", ".", "!", "?", ";", ":", " " }; 
    try 
    { 
     var str = enc.GetString(file); 
     query = from line in str 
       let data = str.Split(separators, StringSplitOptions.RemoveEmptyEntries) 
       select new CandidatesDTO 
       { 
        Id = Int32.Parse(data[0]), 
        Name = data[1], 
        DOB = DateTime.Parse(data[2], CultureInfo.InvariantCulture), 
        Phone = data[3], 
        Email = data[4] 
       }; 
    } 
    catch (Exception ex) 
    { 
     throw new Exception(ex.Message); 
    } 
    return query; 
} 

UPDATE。我发现有异常 - “输入字符串格式不正确”。看起来像一些不正确的类型是通过字符串传递的,这导致了FormatException。

+0

请分享您的CSV文件的内容,以及 –

+0

我可以建议你到F#项目添加到您当前的解决方案。然后,您可以利用CSV类型提供程序的优势,详细信息请参阅http://fsharp.github.io/FSharp.Data/library/CsvProvider.html 除此之外,使用F#还可以快速且轻松地定义DTO –

+0

该文件必须为空。你至少应该有一个候选人在查询,你有空。 – jdweng

回答

0

从查看代码,我认为linq将str视为IEnumerable<char>。您可能需要执行str.Split("\r\n")或任何行分隔符,以便您可以获取每行代码。

private IEnumerable<CandidatesDTO> FileToDto(byte[] file) 
{ 
    System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); 
    IEnumerable<CandidatesDTO> query = null; 
    string[] separators = { ",", ".", "!", "?", ";", ":", " " }; 
    try 
    { 
     var str = enc.GetString(file); 
     query = from line in str.Split(new [] {"\n\r"}, StringSplitOptions.RemoveEmptyEntries) 
       let data = line.Split(separators, StringSplitOptions.RemoveEmptyEntries) 
       select new CandidatesDTO 
       { 
        Id = Int32.Parse(data[0]), 
        Name = data[1], 
        DOB = DateTime.Parse(data[2], CultureInfo.InvariantCulture), 
        Phone = data[3], 
        Email = data[4] 
       }; 
    } 
    catch (Exception ex) 
    { 
     throw new Exception(ex.Message); 
    } 
    return query; 
} 
+0

你是对的 - 几个数组元素中有\ n \ r符号,这导致了FormatException。 –