У меня есть метод, который принимает общий IEnumerable и генерирует списки уникальных значений для каждого столбца. Излишне говорить, что это очень медленно, я предполагаю, что это из-за всех используемых отражений.
Вот пример кода:
private void PopulateReferenceMatrices(IEnumerable newValue)
{
Type t = newValue.GetType();
Type baseType = t.GetGenericArguments()[0];
PropertyInfo[] properties;
Dictionary<string, int> indexValues = new Dictionary<string, int>();
properties = baseType.GetProperties();
int numProperties = properties.Count();
ListValues = new List<object>[numProperties];
for (int i = 0; i < numProperties; i++)
{
indexValues.Add(properties[i].Name, i);
FilterValues[i] = new List<object>();
}
//populate values into array
foreach (dynamic da in newValue)
{
foreach (PropertyInfo d in properties)
{
Object property = d.GetValue(da);
ListValues[indexValues[d.Name]].Add(property);
}
}
}
Могу ли я сгенерировать список значений для каждого свойства без прохождения строки IEnumerable за строкой и приведения каждого свойства к объекту?
Есть ли более быстрый способ сделать что-то подобное для каждого элемента в IEnumerable?:
public IList getRowValue(IEnumerable value, string propertyName)
{
value.Select(x => x.propertyName).ToList();
}