у меня следующая модель
public class Model
{
public string Name {get;set;}
public DateTime HireDate {get;set;}
public decimal Salary {get;set;}
public int Hours {get;set;}
}
Теперь у меня есть следующий список
List<Model> employees = new List<Model>();
Я принимаю ввод строки выражения от пользователя, ниже приведены примеры того, что может использовать пользователь.
Зарплата
Зарплата + 500
Зарплата * Часы
СУММ(часы)
СУММА(часы * зарплата)
СУММ(Часы) / МИН (Часы)
Мне нужно обработать пользовательские выражения в другой IEnumerable либо int, либо decimal, в зависимости от расчета и того, какой тип имеет более высокую точность, например, 3-е выражение будет генерировать следующее
var result = employees.Select(e => e.Salary * e.Hours)
4-й приведет к этому
var result = employees.Sum(e => e.Hours)
В настоящее время я делаю это, сначала анализируя выражение в дереве синтаксического анализа и создавая дерево выражений, используя System.Linq.Expressions. При таком подходе получается много кода, который трудно прочитать другим разработчикам. Есть ли способ проще?