使用反射获取动态创建的 NPOCO 对象键和值 C#
getting dynamically created NPOCO object keys and values C# using reflection
我必须编写一个管理模块,系统管理员可以在其中检查他选择的 table 中的所有值。由于数据库有超过 100 个 table,我写了一个通用方法 returns 一个 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 时,这是每个项目上的内容:
那么,我怎样才能访问那些 "Keys" 和 "Values" 属性?查字典也有帮助。
编辑:
这是有效的代码,感谢@Shaun Luttin 的回答
foreach (object item in result)
{
foreach (var property in (IDictionary<String, Object>)item)
{
//Do awesome stuff!
}
}
从 at the source of NPoco.PocoExpando 来看,它实现了 IDictionary<string, object>
,因此您可以转换每个项目并迭代属性。
这与我们用来迭代 ExpandoObject
的属性的策略相同。这是DotNetFiddle that shows策略。
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);
}
}
}
我必须编写一个管理模块,系统管理员可以在其中检查他选择的 table 中的所有值。由于数据库有超过 100 个 table,我写了一个通用方法 returns 一个 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 时,这是每个项目上的内容:
那么,我怎样才能访问那些 "Keys" 和 "Values" 属性?查字典也有帮助。
编辑: 这是有效的代码,感谢@Shaun Luttin 的回答
foreach (object item in result)
{
foreach (var property in (IDictionary<String, Object>)item)
{
//Do awesome stuff!
}
}
从 at the source of NPoco.PocoExpando 来看,它实现了 IDictionary<string, object>
,因此您可以转换每个项目并迭代属性。
这与我们用来迭代 ExpandoObject
的属性的策略相同。这是DotNetFiddle that shows策略。
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);
}
}
}