2016-10-05 84 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。 –