有没有办法通过字符串或索引访问Dapper FastExpando中的列?

时间:2011-05-29 16:09:59

标签: c# dynamic dapper

我正在引入一个Dapper FastExpando对象,希望能够在运行时而不是在设计/编译时动态引用列名。所以我希望能够做到以下几点:

var testdata = conn.Query("select * from Ride Where RiderNum = 21457");

我希望能够做到以下几点:

foreach( var row in testdata) {
    var Value = row["PropertyA"];
}

我明白我能做到:

var Value = row.PropertyA;

但是我不能这样做,因为我将需要的属性名称直到运行时才会知道。

this SO Question的答案不起作用。我仍然得到相同的Target Invocation例外。所以......

有没有办法用Dapper FastExpando做我想做的事?

3 个答案:

答案 0 :(得分:32)

当然,它实际上比那更容易:

var sql = "select 1 A, 'two' B";
var row = (IDictionary<string, object>)connection.Query(sql).First();
row["A"].IsEqualTo(1);
row["B"].IsEqualTo("two");

答案 1 :(得分:2)

关于标题的部分&#34;或索引?&#34; - 我需要按索引访问结果,因为返回的列名有时会发生变化,因此您可以使用Sam Saffron的变体答案:

var sql = "select 1, 'two'";
var row = (IDictionary<string, object>)connection.Query(sql).First();
row.Values.ElementAt(0).IsEqualTo(1);
row.Values.ElementAt(1).IsEqualTo("two");

答案 2 :(得分:0)

有一种简单的方法可以直接访问样本下面的字段

string strConexao = WebConfigurationManager.ConnectionStrings["connection"].ConnectionString;

conexaoBD = new SqlConnection(strConexao);
conexaoBD.Open();

var result = conexaoBD.Query("Select Field1,Field2 from Table").First();

//access field value result.Field1 
//access field value result.Field2

if (result.Field1 == "abc"){ dosomething}