从string生成lambda表达式

时间:2014-12-15 05:28:48

标签: c# lambda

我需要将lambda表达式存储在数据库中并动态执行它们。以下代码段可以正常运行,

float result = dataRowArray.AsEnumerable().Sum(r => r.Field<float>("ColumnA") * r.Field<float>("ColumnB"));

但我想将以下部分存储在字符串中......

r => r.Field<float>("ColumnA") * r.Field<float>("ColumnB")

...并按照以下方式动态注入:

float result = MySession.Current.dr.AsEnumerable().Sum(storedLambdaString);

我已经完成了大量的谷歌搜索,但我已经做空了。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我建议将查询存储在数据库中,并使用LINQ执行,如下所示。

using (eEntities db = new eEntities())
{
    string query = "select name,age,salary from employees"
    var employees = db.Database.SqlQuery<Employee>(query).
}

请注意:员工在我的自定义类中具有与查询相同的属性。

答案 1 :(得分:1)

Theres是一个可以帮助你的nuget包&#34; System.Linq.Dynamic&#34;。此示例代码有效......

 public class TestRow
{
    public Dictionary<string,float> Field { get; set; }
    public TestRow()
    {
        this.Field = new Dictionary<string, float>();
        this.Field.Add("ColumnA", 2);
        this.Field.Add("ColumnB", 3);
    }
}
class Program
{

    static void Main(string[] args)
    {
        var testRow = new TestRow();
        string expressionString = "r.Field[\"ColumnA\"] * r.Field[\"ColumnB\"]";
        var parameter = Expression.Parameter(typeof(TestRow),"r");
        var lambdaET = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { parameter }, typeof(float), expressionString);

        var result = lambdaET.Compile().DynamicInvoke(testRow);
        Console.WriteLine(result);
        Console.ReadLine();
    }
}