Как получить имя свойства и типы (по рефлексии или лучше) результата linq анонимного типа - PullRequest
0 голосов
/ 23 мая 2011

Мне нужно получить имена свойств и типы результатов linq (по отражению или лучше) ... Я говорю лучше, потому что я думаю, что у linq должна быть структура в каждом запросе с этой информацией !!!

например

У меня есть запрос типа linq:

dim query1 = из e0 в клиентах выберите новый {e0.id, e0.name}

Я передаю query1 в качестве параметра функции, затем мне нужно знать, сколько свойств в query1, имена свойств и типы свойств ...

Thx, ZEE;)

Ответы [ 2 ]

0 голосов
/ 23 мая 2011

Во-первых, вы не должны передавать результаты запроса, типизированные как последовательность экземпляров анонимного типа, другому методу. Если вы делаете это, вы должны создать конкретный класс для результатов запроса.

Вы можете использовать отражение, чтобы вырвать свойства из query1 следующим образом. query1 будет реализовывать IEnumerable<T> для некоторого уникального типа T. Если у вас есть этот тип, вы можете позвонить

type.GetProperties()

для получения перечисления имен членов анонимного типа.

0 голосов
/ 23 мая 2011
Type memberType = query1.GetType().GetGenericArguments()[0];
foreach (var a in query1)
{
    foreach (PropertyInfo pi in memberType.GetProperties())
    {
        Console.WriteLine(pi.GetValue(a, null));
    }
}

на самом деле я буду хранить PropertyInfo s в List<PropertyInfo> и во внутреннем foreach использовать сохраненные свойства.Но приведенный выше код прост для понимания.

...