我正在引入一个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做我想做的事?
答案 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}