Как найти типы в IEnumerable <ExpandoObject>, возвращаемые PetaPoco.Database.Query <dynamic>? - PullRequest
1 голос
/ 16 ноября 2011

Я хотел бы выяснить во время выполнения все типы в 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?

(Резервным вариантом является повторный запрос базы данных на предмет объектов схемы.)

1 Ответ

0 голосов
/ 29 ноября 2012

Возьмите источник данных creator.cs из этого блога, добавьте несколько перегрузок для System.Collections.Generic.IDictionary<TKey, TValue>.Это позволит создавать новые типы, которые вы можете исследовать или, возможно, сохранить как сборку.Или загрузите загрузку непосредственно с 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();
...