Я должен написать 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 в коллекции, это то, что каждый элемент имеет на нем:
Итак, как я могу получить доступ к этим свойствам "Ключи" и "Ценности"? Получение словаря также может помочь.
Изменение: это код, который работает, благодаря @Shaun Luttin для ответа
foreach (object item in result)
{
foreach (var property in (IDictionary<String, Object>)item)
{
//Do awesome stuff!
}
}
От взгляда на источник 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);
}
}
}