4

DataContext.ExecuteQueryしたがって、C#4.0での動的キーワードの出現により、任意の列が選択されたときに返される型を処理する問題のより良い解決策を見つけることができると期待しています。

過去に、私はそのようなクエリの結果を保持するために新しいタイプを作成したか、このSO投稿で説明されている方法を使用しました。そこで、.NET 4.0で実行されている新しいプロジェクトに取り組むことができるようになったので、動的タイプを使用して同じことを簡単に実行できるようにすることを検討しました。

だから、私はこれを試してみました:

var result = _db.ExecuteQuery<dynamic>( "SELECT CustomerID,City FROM Customers", new object[0] );
foreach( var d in result )
{
    MessageBox.Show( String.Format( "{0}, {1}", d.CustomerID, d.City ) );        
}

動的オブジェクトのプロパティCustomerIDが存在しないため、実行時に例外がスローされます。したがって、これまでの動的キーワードの経験はnil(記事/ブログ投稿、実際の経験はありません)であるため、ここでやろうとしていることが可能かどうかを誰かに知らせてもらいたいと思っていました。ExecuteQueryの背後にある「魔法」の量を過大評価している可能性がありますが、これは舞台裏で行われるプロパティマッピングのために機能する可能性があると思いました。どんな助けでも大歓迎です。

4

2 に答える 2

6

最近では、元の質問に美しく適合するdapperを作成しました。

var result = connection.Query( "SELECT CustomerID,City FROM Customers");
foreach( var d in result )
{
    MessageBox.Show( String.Format( "{0}, {1}", d.CustomerID, d.City ) );        
}

パラメータなどを許可し、Query<T>-を介して(推奨される)型指定されたAPIがありますが、dynamicAPIも正常に機能します。

于 2011-05-13T09:31:10.627 に答える
1

マッピングは、Tリフレクションを検査して使用することによって行われます。これは、このコンテキストでdynamic実際には単なる空想の言葉です。object今のところ、予想されるレイアウトに一致するタイプを作成する必要があるかもしれません。

渡してみることができますがTuple<int,string>、私はこれを試していません。ctorarg0をcol0などにマップすることが実現するかどうかはわかりません。

私は質問のようにコードをかなり使用しますが、特に自動的に実装されたプロパティでは、意味のあるスタブクラスを作成することは通常問題ではありません。

于 2011-02-17T06:56:57.957 に答える