1

ExpandoObject のすべての型を実行時に調べたいと思います。

いくつかの探索的コードを次に示します。

using PetaPoco;

...

var data = _d.Query<dynamic>(_script);
IDictionary<string, object> hood = (IDictionary<string, object>)data.First();
var wow = hood.Values.Where(x => x != null).Select(x => x.GetType().ToString());

where メソッドは、返された ExpandoObject の null 値を丁寧にステップオーバーします...そもそも返される行に依存しているため、解決策はほとんどありません。

ExpandoObject を構築するときに PetaPoco.Database が学習した内容を照会するより良い方法はありますか?

(フォールバックは、データベースのスキーマ オブジェクトを再度クエリすることです。)

4

1 に答える 1

0

このブログのデータ ソースの Creator.cs を使用して、 System.Collections.Generic.IDictionary<TKey, TValue>. これにより、探索したり、アセンブリとして保存したりできる新しい型が ilEmit されます。または、 http://www.bodurov.com/files/DataSourceCreator.cs.zipから直接ダウンロードします。

これは、ペタポコから出てくるものに使用する方法です

public static IEnumerable ToDataSource(this IEnumerable<IDictionary> list)

ただし、コードのコピーパスタを作成して、ほぼまったく同じ実装でオーバーロードを追加しますが、シグネチャは

public static IEnumerable ToDataSource(this IEnumerable<IDictionary<string,object>> list)

したがって、これに合わせて調整されたコードは次のようになります

var hood=data.Cast<IDictionary<string,object>>().ToDataSource();
于 2012-11-28T23:16:35.983 に答える