Извлечение значений полей на основе имени поля

#linq-to-sql

#linq-to-sql

Вопрос:

Я унаследовал базу данных, в которой отдельные точки данных хранятся горизонтально в полях, а не вертикально. Другими словами, в дополнение к другим полям, каждая запись (которая представляет определенный канал, из которого были получены данные) содержит 250 полей, имена которых варьируются от «P0001» до «P0250».

Я хочу извлечь данные из каждого поля PXXXX и сохранить их в списке (Double). Предполагая, что R250 — это запись, содержащая эти поля, как мне создать запрос LINQ для получения этих данных?

Ответ №1:

     For Each pn In Type.GetType(R250.ToString).GetProperties.Where(Function(n) n.Name.StartsWith("P")).Select(Function(m) m.Name)
        Console.WriteLine(Type.GetType(R250.ToString).GetProperty(pn).GetValue(R250, Nothing))
    Next
  

Ответ №2:

Вы могли бы использовать отражение, например:

 List<double> theList = new List<double>();
for (int i = 1; i <=250; i  )
{
   PropertyInfo fiField = R250.GetType().GetProperty("P"   i.ToString().PadLeft(4));
   if (fiField != null amp;amp; fiField.PropertyType == typeof(double))
      theList.Add((double)fiField.GetValue(R250, new object[] { }));
}
  

Комментарии:

1. Спасибо, Джо. Примерно через 20 минут после публикации я нашел ответ, который я перечислил выше.