Если propertyName
не обязательно должна быть строкой, вы можете вместо этого использовать лямбда-выражение для извлечения правого поля. C# строго типизирован, поэтому это лучшее решение, которое я могу найти, если вы хотите, чтобы свойства в PriceCalculationDetails были разных типов.
public static T GetTheThing<T>(this ICollection<CalculationDetails> calculationDetails, Func<CalculationDetails, T> propertyExtractor, int calculationId, string category)
{
var matchingCalculationDetails = calculationDetails.First(); // Insert your preferred logic to find the right one here.
return propertyExtractor(matchingCalculationDetails);
}
Затем вы можете вызвать этот метод, выполнив
decimal rate = someCalculationDetailsCollection.GetTheThing(x => x.Rate, 0, "category0")
Это похоже на прямое использование LINQ:
someCalculationDetailsCollection
.Where(x => x.Id == 0 && x.Category == "category0")
.Select(x => x.Rate)