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 中的空值......几乎不是一个解决方案,因为它依赖于甚至首先返回的行。

有没有更好的方法来查询 PetaPoco.Database 在构建 ExpandoObject 时学到了什么?

(后备是再次查询数据库以获取其模式对象。)

4

1 回答 1

0

从这个博客中获取数据源 creator.cs添加一些重载的System.Collections.Generic.IDictionary<TKey, TValue>. 这将 ilEmit 您可以探索的新类型,或者可能保存为程序集。或者直接从http://www.bodurov.com/files/DataSourceCreator.cs.zip下载

这是您将在 PetaPoco 产生的东西上使用的方法

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 回答