-6
我有一個csv文件,其中20列中有大約10.000行。我需要將此文件讀入C#對象才能對此對象執行LINQ查詢。你更喜歡什麼?將CSV讀取到C#對象,以便能夠對其執行LINQ查詢
我有一個csv文件,其中20列中有大約10.000行。我需要將此文件讀入C#對象才能對此對象執行LINQ查詢。你更喜歡什麼?將CSV讀取到C#對象,以便能夠對其執行LINQ查詢
這部分很容易,因爲您可以在IEnumerable<T>
上運行LINQ查詢 - 換句話說,任何可以執行循環的東西都可以查詢。有很多方法可以做到這一點。然而,首先,我假定您已經知道要處理的數據的模式(即您已經知道第17列是出生日期或類似的東西)。如果這樣做,您將能夠非常快速地構建單個C#數據對象,以便您的LINQ查詢可以輕鬆運行。如果您沒有,那麼您的C#數據對象可能會是一個關聯數組(例如HashMap
和string
鍵)。
如果您必須對數據運行多個查詢,您可以簡單地逐一讀取每行,並將其放入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)
除非你有一長串包含複雜數據的列,並且你需要處理很多特殊情況,你可以自己編寫一個簡單的程序。你嘗試過什麼嗎? –
你不能將它轉換爲數據庫? –
@Jelly:不,我不能使用數據庫。 – STORM