23

オブジェクトを取り込み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;

しかし、必要なプロパティの名前は実行時までわからないため、それはできません。

この SO Questionからの答えは機能しません。私はまだ同じTarget Invocation例外を受け取ります。そう...

Dapper FastExpando でやりたいことを実行する方法はありますか?

4

3 に答える 3

36

確かに、それは実際にはそれよりもはるかに簡単です:

var sql = "select 1 A, 'two' B";
var row = (IDictionary<string, object>)connection.Query(sql).First();
row["A"].IsEqualTo(1);
row["B"].IsEqualTo("two");
于 2011-05-29T23:52:56.783 に答える
2

タイトルの「or index?」の部分について -返される列名が時々変更されるため、インデックスで結果にアクセスする必要があったため、次のような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");
于 2014-08-04T22:01:40.427 に答える