Получение динамически созданных ключей объектов 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 в коллекции, это то, что есть на каждом предмете:
Итак, как я могу получить доступ к этим свойствам "Ключи" и "Значения"? Получение словаря тоже может помочь.
Редактировать: это код, который работает, спасибо @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);
}
}
}