允许通过 IEnumerable 进行即席表达式

本文关键字:表达式 许通过 IEnumerable MyObj | 更新日期: 2023-09-27 18:33:45

我有以下模型

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,具体取决于计算和哪种类型具有更高的精度,例如 第三个表达式将生成以下内容

var result = employees.Select(e => e.Salary * e.Hours)

第 4 个将导致此

var result = employees.Sum(e => e.Hours)

我目前正在通过首先将表达式解析为解析树并使用 System.Linq.Expressions 命名空间构建表达式树来做到这一点。使用这种方法,有很多代码,其他开发人员不容易阅读。有没有更简单的方法?

允许通过 IEnumerable<MyObj> 进行即席表达式

也许与其再做一次,你可能会在(已经很老了)Scott Gu的博客上找到一些帮助

或者至少它应该给你一个很好的代码库来研究