Получение динамически созданных ключей объектов NPOCO и значений C# с использованием отражения

Я должен написать административный модуль, в котором администратор sys может проверить все значения в таблице, которую он выбирает. Поскольку в базе данных более 100 таблиц, я написал общий метод, который возвращает IEnumerable<object> с данными:

 public IEnumerable<Object> getAllData(string tableName)
 {
    IEnumerable<Object> result = new List<Object>();
    string sql = string.Concat("SELECT * FROM ", tableName);
    using (var uow = _provider.GetUnitOfWork())
    {
        result = uow.Instance.Fetch<Object>(sql);
    }
    return result;
 }

Каждый элемент в результате имеет тип object{NPoco.PocoExpando}и мне нужно получить ключи и значения для каждого элемента, чтобы преобразовать их в одну строку. Когда я делаю foreach в коллекции, это то, что есть на каждом предмете:

Visual Studio Watch Panel

Итак, как я могу получить доступ к этим свойствам "Ключи" и "Значения"? Получение словаря тоже может помочь.

Редактировать: это код, который работает, спасибо @Shaun Luttin за ответ

foreach (object item in result) 
{ 
    foreach (var property in (IDictionary<String, Object>)item) 
    { 
        //Do awesome stuff! 
    }
} 

1 ответ

Решение

Посмотрев на источник NPoco.PocoExpando, он реализует IDictionary<string, object>, так что вы можете разыграть каждый элемент и повторить свойства.

Это та же стратегия, которую мы использовали бы для итерации свойств ExpandoObject, Вот DotNetFiddle, который показывает стратегию.

using System;
using System.Dynamic;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        dynamic resultItem = new ExpandoObject();
        resultItem.Name = "John Smith";
        resultItem.Age = 33;

        // cast as IDictionary
        foreach (var property in (IDictionary<String, Object>)resultItem)
        {
            Console.WriteLine(property.Key + ": " + property.Value);
        }
    }
}
Другие вопросы по тегам