#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 минут после публикации я нашел ответ, который я перечислил выше.