2016-10-24 2 views
-2

Чтобы получить имя от id, используя отражение от перечислимого. Я использую:Как использовать Linq с Reflection в C#?

foreach(string idValue in Values) 
{ 
    var listSource = itemsSource as IEnumerable; 
    Type listType = listSource.GetType().GenericTypeArguments[0] 
    PropertyInfo idProperty = listType.GetType().GetProperty("Id"); 
    PropertyInfo nameProperty = listType.GetType().GetProperty("Name"); 

    foreach (var listItem in listSource) 
    { 
     if (idValue.Equals(idProperty.GetValue(listItem, null).ToString())) 
     { 
      value = nameProperty.GetValue(listItem, null).ToString(); 
      break; 
     } 
    } 
    //do something with value. 
} 

Как использовать Linq с отражением, так что мне не нужен цикл по элементам для каждого значения «idValue» во внешнем контуре ??

что-то вроде:

reflectionList.Select(x=> x.idProperty == idValue) и использовать его, чтобы получить значение nameProperty

Пожалуйста, помогите.

+6

Использование LINQ не позволяет избежать циклов, это просто означает, что вам не нужно их выписывать. – Servy

+0

Добавить использование в System.Linq? – Botonomous

+0

В чем вопрос? _ «Как преобразовать это в Linq» _? – CodeCaster

ответ

0

Это не может быть протестировано, так как я не знаю, какие типы вы используете (для Values конкретно), равно как и ожидаемый результат.

value = listSource.Where(item => idValue.Equals(idProperty.GetValue(item, null).ToString())) 
    .Select(item => nameProperty.GetValue(item, null).ToString()) 
    .First(); 

Сначала мы получаем все элементы, соответствующие вашему if состояния, а затем перевести их в виде простой строки по nameProperty, а затем получить только первый (который также должен быть единственный) строку пункта.

+0

Благодарим вас за ответ. проблема в том, что я не могу использовать.Где или Linq даже после использования System.Linq. Это может быть из-за того, что тип IEnumerable не известен в этой точке. – Jeevan

+0

Вы явно используете 'IEnumerable' в своем собственном коде, поэтому это не может быть проблемой. Какая ошибка вы получаете? – Kilazur

Смежные вопросы