我有一个WebApi动作,它根据Sql查询返回动态结果。 目前使用以下函数转换IDataReader工作正常,但它为每一行创建一个Dictionary对象。我想知道是否有更好的方法来做到这一点。
private IEnumerable ReadResult(IDataReader reader)
{
var names = new string[reader.FieldCount];
var values = new object[reader.FieldCount];
for (var i = 0; i < reader.FieldCount; i++)
{
names[i] = reader.GetName(i);
}
while (reader.Read())
{
reader.GetValues(values);
var record = names.ToDictionary(i => i, s => values[Array.IndexOf(names, s)]);
yield return record;
}
}
答案 0 :(得分:0)
您可以尝试这种方法(不知道这将如何与WebAPI一起使用,但仍值得一试):
var record = new ExpandoObject() as IDictionary<string, object>;
foreach(var name in names)
record[name] = values[Array.IndexOf(names, name)];
yield return record;