2011-01-14 100 views
0

我在數據庫中有數據,並且我的代碼使用LINQ to Entities訪問它。C#中的動態數據結構

我正在寫一些軟件,我需要能夠創建一個動態腳本。客戶可以編寫腳本,但更可能只是修改它們。該腳本將指定這樣的東西,

Dataset data = GetDataset("table_name", "field = '1'"); 

if (data.Read()) 
{ 
    string field = data["field"]; 
    while (cway.Read()) 
    { 
     // do some other stuff 
    } 
} 

所以上面的腳本將會從數據庫中被稱爲「表名」的數據庫表中的數據讀入到我指定根據過濾某種類型的列表「字段= '1'」。它將會讀取特定的字段並執行正常的比較和計算。

最重要的是這必須是動態的。我可以在我們的數據庫中指定任何表格,任何過濾器和我都必須能夠訪問任何字段。

我正在使用腳本引擎,這意味着我正在編寫的腳本必須用C#編寫。數據集已過時,我寧願遠離它們。

只是重新迭代我不是真的想保持上面的格式,我可以定義任何我想在幕後爲我的C#腳本調用的方法。例如,上面可能會出現這樣的結果,例如,

var data = GetData("table_name", "field = '1'"); 

while (data.ReadNext()) 
{ 
    var value = data.DynamicField; 
} 

我可以使用反射作爲例子,但也許會太慢?有任何想法嗎?

回答

1

如果你想動態讀取DataReader的背景下,這是一個非常簡單的步驟:

ArrayList al = new ArrayList(); 
SqlDataReader dataReader = myCommand.ExecuteReader(); 

if (dataReader.HasRows) 
{ 
    while (dataReader.Read()) 
    { 
    string[] fields = new string[datareader.FieldCount]; 
    for (int i =0; i < datareader.FieldCount; ++i) 
    { 
     fields[i] = dataReader[i].ToString() ; 
    } 
    al.Add(fields); 
    } 

} 這將返回基於讀者有場數的動態對象組成的數組列表。

+0

謝謝,但您將所有數據都放入數組列表中,而不考慮字段名稱。我正在尋找一種現代化的方式來編碼。如果可能,不使用數據集或陣列列表,使用LINQ to Entities。我正在尋找一種方法來動態保存記錄集合並訪問腳本中這些記錄中的特定字段。 – peter 2011-01-14 03:19:27