2010-02-08 62 views
2

我有一個csv文件,我導入到DataTable中。此外,我用幾個查詢創建了一個TableAdapter。是否有可能直接在「內存中」DataTable上執行與TableAdapter相關的查詢(似乎不是這樣),或者我總是必須先將導入的DataTable寫入數據庫,然後在數據庫上執行TableAdapter查詢堅持數據?我想直接使用數據表,因爲它是一個小型項目,不值得將數據從值對象轉換爲數據表或使用OR映射器。.net 2.0:處理內存數據表的最佳方式是什麼?

在此先感謝!

最好的問候,

安德烈亞斯

PS:這只是一個小數據量,所以內存影響應該不會那麼大。

+0

您可以考慮使用LINQ to CSV作爲替代方法:http://www.codeproject.com/KB/linq/LINQtoCSV.aspx。本身沒有映射,但您必須創建一個具有屬性的類。查詢的靈活性將是不可思議的。 – 2010-02-08 17:12:29

+2

我不確定我瞭解你的問題。 DataTable是一個.NET構造,因此它只存在於內存中。我認爲您需要提供更多關於您處理數據的方式的信息。 – Farinha 2010-02-08 17:13:45

+0

我只是想保存往返數據庫(實際上沒有問題;我的SQL Server速度很快;-))。我不認爲將csv物理地讀入數據庫,然後通過tableadapter的查詢從數據庫中檢索數據,但我認爲最好能省去物理讀寫的步驟,並直接執行此操作。但實際上它不是mattern。 – 2010-02-08 22:18:34

回答

3

您可以使用DataTable的Select方法。它採用類似SQL的過濾器(類似於您在where條款寫什麼)

var table = new DataTable(); 

table.Columns.Add("Value"); 

table.Rows.Add(1); 
table.Rows.Add("One"); 

var rows = table.Select("value='One'"); 

foreach (var value in rows) 
    Console.WriteLine(value["Value"]); 
+0

謝謝。我讀過這個。但據我所知,這隻適用於「簡單」選擇。使用Compute(),您可以進行一些計算,但對於「group by」,這非常麻煩(http://support.microsoft.com/?scid=kb%3Ben-us%3B326145&x=3&y=12)以及for joins(http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/f122d7f4-3b7d-4d93-bd0f-8bb57cd990a4/)。似乎沒有簡單的方法來做到這一點。所以我必須將數據來回寫入數據庫。因爲沒有太多數據,所以沒有問題。 – 2010-02-08 22:12:04

1

加載整個文件到內存中,並使用Linq to DataSet

相同的查詢可以透明地使用SQL數據庫(Linq to SQL),但我不知道是否有類似Linq to CSVLinq to ODBC

+0

是的,我正在考慮這個問題。但是到目前爲止,我還沒有找到一種方法將其與VS 2005結合使用。 – 2010-02-09 10:50:56

+0

Google for'LinqBridge',如果您想在.Net 2.0中使用linq。但是你最好使用VS2008,而不是VS2005,否則擴展方法和lambda不起作用,代碼將不得不醜陋 – 2010-02-10 07:08:54

相關問題