Вы можете использовать рефлексию, чтобы делать подобные вещи. Вот пример, который возвращает перечисляемый набор кортежей, который содержит имя и значение свойства:
public IEnumerable<(string propertyName, TProperty value)> GetAllParts<TProperty>(
object input, string prefix)
{
// Get all the properties that start with 'prefix'
var properties = input
.GetType()
.GetProperties()
.Where(p => p.Name.StartsWith(prefix))
.ToArray();
foreach (var property in properties)
{
// Return the property name and the value
yield return ($"{property.Name}", (TProperty)property.GetValue(input));
}
}
Чтобы использовать его, давайте создадим такой класс:
public class MyThing
{
public int IntProperty1 { get; set; }
public int IntProperty2 { get; set; }
public int IntProperty3 { get; set; }
public int IntProperty4 { get; set; }
public int IntProperty5 { get; set; }
public string StringProperty1 { get; set; }
public string StringProperty2 { get; set; }
public string StringProperty3 { get; set; }
public string StringProperty4 { get; set; }
public string StringProperty5 { get; set; }
}
Создайте экземпляр об этом:
var thing = new MyThing
{
IntProperty1 = 1,
IntProperty2 = 2,
IntProperty3 = 3,
IntProperty4 = 4,
IntProperty5 = 5,
StringProperty1 = "Value1",
StringProperty2 = "Value2",
StringProperty3 = "Value3",
StringProperty4 = "Value4",
StringProperty5 = "Value5"
};
И, наконец, получите нужные нам значения:
var intValues = GetAllParts<int>(thing, "IntProperty");
var stringValues = GetAllParts<string>(thing, "StringProperty");
И вы можете использовать такие результаты, например:
foreach (var (propertyName, value) in intValues)
{
Console.WriteLine($"Property {propertyName} has a value of {value}");
}
Примечание : Похоже, что вы используете Entity Framework, если так, EF не может использовать подобные методы, поэтому вам нужно извлечь данные из базы данных в локальную память и затем вызвать эту функцию.