Вопрос по linq, reflection, c# – Запрос коллекции с использованием объекта PropertyInfo в LINQ

4

У меня есть метод с такой подписью

void RefreshMethod<T>(IEnumerable<T> lst, string propertyName) where T:class
{
   Type type = typeof(T);
   PropertyInfo property = type.GetProperties().Single(u => u.Name == primaryKeyProperty);
  //query goes here
}

Теперь я хочу запросить эту коллекцию для получения всех значений которых

propertyName < 0

В простом сценарии это было бы так просто, как это

lst.where(u=>u.ID<0)

Но здесь у меня нет этого идентификатора, но есть соответствующее «PropertyInfo». объект.

Как я должен достичь этого.

любезно руководство

Ваш Ответ

1   ответ
5

Вы можете посмотреть значение свойства, используяproperty.GetValue(anObjectOfTypeT, null).

Так что-то вроде:

var refreshedList =  lst.Where(l => ((int)(property.GetValue(l, null)) < 0).ToList();

Это предполагает, что свойство всегда будет иметь тип int, хотя.

@Scar Что вы имеете в виду, свойство типа string, double или какого-то другого типа? Вы можете изменить кастинг наint, но вы должны знать тип заранее.
Есть ли способ сделать это для других типов свойств?
@ Maarten Я имею в виду, если мне нужно сделать это для нескольких свойств разных типов, есть ли другой способ, кроме создания разных переменных для каждого типа данных?
Гениально, как раз то, что мне нужно

Похожие вопросы