如何获取linq结果匿名类型的属性名称和类型(通过反射或更好)

时间:2011-05-23 17:27:46

标签: linq properties introspection

我需要获取linq结果的属性名称和类型(通过反射或更好)... 我说得更好因为我认为linq应该在每个查询中都有这个信息的结构!!!

例如

我有一个linq查询,如:

dim query1 =来自客户端的e0选择新的{e0.id,e0.name}

我将query1作为参数传递给函数,然后我需要知道query1中有多少属性,属性名称和属性类型......

Thx,ZEE;)

2 个答案:

答案 0 :(得分:0)

Type memberType = query1.GetType().GetGenericArguments()[0];
foreach (var a in query1)
{
    foreach (PropertyInfo pi in memberType.GetProperties())
    {
        Console.WriteLine(pi.GetValue(a, null));
    }
}

实际上我将PropertyInfo存储在List<PropertyInfo>和内部foreach中,使用存储的属性。但上面的代码是最容易理解的。

答案 1 :(得分:0)

首先,您不应将作为匿名类型实例序列的查询结果传递给另一个方法。如果你这样做,你应该为查询结果创建一个具体的类。

您可以使用反射从query1中删除属性,如下所示。 query1会针对某些唯一类型IEnumerable<T>实施T。有了这种类型,你可以打电话给

type.GetProperties()

获取匿名类型成员名称的枚举。