允许在IEnumerable <myobj> </myobj>上使用临时表达式

时间:2013-10-03 20:40:50

标签: c# linq lambda expression enumerable

我有以下型号

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

     

薪水*小时

     

SUM(小时)

     

SUM(小时*工资)

     

SUM(小时)/ MIN(小时)

我必须将用户的表达式处理成另一个int或十进制的IEnumerable,具体取决于计算和哪种类型具有更高的精度,例如The 3rd Expression将生成以下内容

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

第4个将导致此

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

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

1 个答案:

答案 0 :(得分:0)

也许你可以找到一些帮助(已经很老了)Scott Gu's Blog

,而不是再做一次

或者至少它应该为您提供良好的代码库以便了解