2015-11-21 50 views
-6

我有一個csv文件,其中20列中有大約10.000行。我需要將此文件讀入C#對象才能對此對象執行LINQ查詢。你更喜歡什麼?將CSV讀取到C#對象,以便能夠對其執行LINQ查詢

+1

除非你有一長串包含複雜數據的列,並且你需要處理很多特殊情況,你可以自己編寫一個簡單的程序。你嘗試過什麼嗎? –

+1

你不能將它轉換爲數據庫? –

+0

@Jelly:不,我不能使用數據庫。 – STORM

回答

1

這部分很容易,因爲您可以在IEnumerable<T>上運行LINQ查詢 - 換句話說,任何可以執行循環的東西都可以查詢。有很多方法可以做到這一點。然而,首先,我假定您已經知道要處理的數據的模式(即您已經知道第17列是出生日期或類似的東西)。如果這樣做,您將能夠非常快速地構建單個C#數據對象,以便您的LINQ查詢可以輕鬆運行。如果您沒有,那麼您的C#數據對象可能會是一個關聯數組(例如HashMapstring鍵)。

如果您必須對數據運行多個查詢,您可以簡單地逐一讀取每行,並將其放入List<T>實例中。

但是,如果你要通過CSV數據僅供一次,可以改爲創建一個迭代方法,只有通過逐行讀出:

public IEnumerable<DataObject> ReadCSVFile(Stream input) 
{ 
    StreamReader reader = new StreamReader(input); 
    string line; 
    while ((line = reader.ReadLine()) != null) // this sets and checks line at the same time 
    { 
    DataObject data = new DataObject(); 

    // ... fill in the parameters of your data object here ... 

    // this will return the single data object, 
    // let your LINQ query process it, and then continue the loop 
    yield return data; 
    } 
    reader.Close(); 
} 

然後,當你做你的LINQ查詢,你調用該方法,如

from data in ReadCSVFile(dataStream)