从父类型属性的子集创建匿名类型

时间:2014-02-07 15:01:29

标签: c# dynamic

我有一个人物对象列表,我希望能够以编程方式获得包含该对象属性子集的匿名类型。我有一个Person对象列表,如:(VS 2010 .NET 4.0)。认为这是理所当然的,但是,是的,Person数据保存在数据库中。

var personList = new List<Person>()
 {
      new Person(){ PersonId=11, Weight=100, Race="Green", Height=230},
      new Person(){ PersonId=22, Weight=110, Race="Blue", Height=130}
 };

并根据用户选择他们想要查看的特定属性我想模拟

var query = from c in personList
            select new
             {
                 Weight = c.Weight,
                 Height = c.Height,
                 PersonId = c.PersonId
             };

在这种情况下,用户界面中的用户选择PersonId,Weight和Height作为他们希望用来创建新匿名类型的属性。

我有以下代码,它会将给定的属性值打印到(模拟的)用户可能选择的屏幕上:

PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(Person));
var propList = new List<string>()
{
     "PersonId","Weight","Height"
};

for (int i = 0; i < personList.Count; i++)
{
      for (int j = 0; j < props.Count; j++)
      {
          if (propList.Contains(props[j].Name))
          {
              //properties added to object here..but can't return anonymous type from method....
              Console.WriteLine(props[j].GetValue(personList[i]));
          }
       }
 }

这个打印 11,100,230和 22,110,130 到控制台。

我要做的是基本上重新创建var query...中的代码,但能够将属性列表传递给查询的select new部分。

1 个答案:

答案 0 :(得分:0)

您见过this thread?

吗?

它将海报引用到MSDN上的ExpandoObject,它允许您动态创建匿名类型。