【问题标题】:getting dynamically created NPOCO object keys and values C# using reflection使用反射获取动态创建的 NPOCO 对象键和值 C#
【发布时间】:2015-06-02 17:20:40
【问题描述】:

我必须编写一个管理模块,系统管理员可以在其中检查他选择的表中的所有值。由于数据库有超过 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! 
    }
} 

【问题讨论】:

标签: c# generic-list npoco


【解决方案1】:

at the source of NPoco.PocoExpando 看,它实现了IDictionary&lt;string, object&gt;,因此您可以强制转换每个项目并迭代属性。

这与我们用来迭代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);
        }
    }
}

【讨论】:

  • 这就是答案!最终代码如下所示: foreach (object item in result) { foreach (var property in (IDictionary)item) { //做一些很棒的事情! } } 感谢您的快速回答!
  • @rernandez 你的最终代码没有出现在评论中。
  • 我用代码编辑了问题,再次感谢您的快速回答
猜你喜欢
  • 2013-02-13
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
相关资源
最近更新 更多