2011-01-14 53 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