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

1

Я должен написать adminsitrative модуль, где sys admin может проверять все значения в таблице, которую он выбирает. Поскольку в базе данных более 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} типа object{NPoco.PocoExpando}, и мне нужно получить ключи и значения для каждого элемента, чтобы преобразовать их в одну строку. Когда я делаю foreach в коллекции, это то, что каждый элемент имеет на нем:

Изображение 174551

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

Изменение: это код, который работает, благодаря @Shaun Luttin для ответа

foreach (object item in result) 
{ 
    foreach (var property in (IDictionary<String, Object>)item) 
    { 
        //Do awesome stuff! 
    }
} 
  • 0
    PocoExpando очень похож на ExpandoObject
Теги:
npoco
generic-list

1 ответ

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);
        }
    }
}
  • 1
    Вот ответ! окончательный код выглядит следующим образом: foreach (элемент объекта в результате) {foreach (свойство var в элементе (IDictionary <String, Object>)) {// Делайте потрясающие вещи! } } Спасибо за ваш быстрый ответ!
  • 0
    @rhernandez Ваш окончательный код не отображается в комментарии.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню