2013-10-03 22 views
2

我有以下型号允许在IEnumerable的即席表达<MyObj>

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或decimal的IEnumerable中,这取决于计算和哪种类型具有更高的精度,例如第三个表达式将基因评定以下

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

第四届一个将导致这个

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

我目前先用System.Linq.Expressions命名空间解析的表达成解析树和建筑物的表达式树做。用这种方法,有很多代码,其他开发人员不易读。有没有更简单的方法?的

回答

0

也许不是老毛病又犯了,你可能会发现一些帮助(已经很老了)Scott Gu's Blog

,或者至少应该给你一个好的代码库来看看进入

+0

难道这家伙使用运行时汇编?每次编译表达式时,这会在内存中创建一个dll。我的表情比LINQ简单得多。感谢您分享它。 – fahadash

+0

@fahadash他正在使用'System.Linq.Expressions'东西,解析所有东西等等,因为这有一些开销,你写的你实际上做的是一样的 – MichaC