C# 从字符串生成lambda表达式

C# 从字符串生成lambda表达式,c#,lambda,C#,Lambda,我需要在数据库中存储lambda表达式并动态执行它们。下面的代码段工作正常 float result = dataRowArray.AsEnumerable().Sum(r => r.Field<float>("ColumnA") * r.Field<float>("ColumnB")); 我已经在谷歌上搜索了很多次,但都没找到。有什么建议吗?我建议将查询存储在数据库中,并使用LINQ执行,如下所示 using (eEntities db = new eEntit

我需要在数据库中存储lambda表达式并动态执行它们。下面的代码段工作正常

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

我已经在谷歌上搜索了很多次,但都没找到。有什么建议吗?

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

using (eEntities db = new eEntities())
{
    string query = "select name,age,salary from employees"
    var employees = db.Database.SqlQuery<Employee>(query).
}
使用(eenties db=new eenties())
{
string query=“从员工中选择姓名、年龄、工资”
var employees=db.Database.SqlQuery(查询)。
}

请注意:Employee是我的自定义类,其属性与查询的属性相同。

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

using (eEntities db = new eEntities())
{
    string query = "select name,age,salary from employees"
    var employees = db.Database.SqlQuery<Employee>(query).
}
使用(eenties db=new eenties())
{
string query=“从员工中选择姓名、年龄、工资”
var employees=db.Database.SqlQuery(查询)。
}

请注意:Employee是我的自定义类,其属性与查询的属性相同。

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

using (eEntities db = new eEntities())
{
    string query = "select name,age,salary from employees"
    var employees = db.Database.SqlQuery<Employee>(query).
}
使用(eenties db=new eenties())
{
string query=“从员工中选择姓名、年龄、工资”
var employees=db.Database.SqlQuery(查询)。
}

请注意:Employee是我的自定义类,其属性与查询的属性相同。

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

using (eEntities db = new eEntities())
{
    string query = "select name,age,salary from employees"
    var employees = db.Database.SqlQuery<Employee>(query).
}
使用(eenties db=new eenties())
{
string query=“从员工中选择姓名、年龄、工资”
var employees=db.Database.SqlQuery(查询)。
}

请注意:Employee在这里是我的自定义类,其属性与查询的属性相同。

这里有一个nuget包,可以帮助您“System.Linq.Dynamic”。此示例代码适用于

 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();
    }
}
公共类TestRow
{
公共字典字段{get;set;}
公共测试行()
{
this.Field=新字典();
此字段添加(“ColumnA”,2);
本栏位添加(“B栏”,3);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var testRow=newtestrow();
字符串表达式string=“r.Field[\“ColumnA\”]*r.Field[\“ColumnB\”];
var参数=Expression.parameter(typeof(TestRow),“r”);
var lambdaET=System.Linq.Dynamic.DynamicExpression.ParseLambda(新[]{parameter},typeof(float),expressionString);
var result=lambdaET.Compile().DynamicInvoke(testRow);
控制台写入线(结果);
Console.ReadLine();
}
}

有一个nuget包可以帮助您“System.Linq.Dynamic”。此示例代码适用于

 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();
    }
}
公共类TestRow
{
公共字典字段{get;set;}
公共测试行()
{
this.Field=新字典();
此字段添加(“ColumnA”,2);
本栏位添加(“B栏”,3);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var testRow=newtestrow();
字符串表达式string=“r.Field[\“ColumnA\”]*r.Field[\“ColumnB\”];
var参数=Expression.parameter(typeof(TestRow),“r”);
var lambdaET=System.Linq.Dynamic.DynamicExpression.ParseLambda(新[]{parameter},typeof(float),expressionString);
var result=lambdaET.Compile().DynamicInvoke(testRow);
控制台写入线(结果);
Console.ReadLine();
}
}

有一个nuget包可以帮助您“System.Linq.Dynamic”。此示例代码适用于

 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();
    }
}
公共类TestRow
{
公共字典字段{get;set;}
公共测试行()
{
this.Field=新字典();
此字段添加(“ColumnA”,2);
本栏位添加(“B栏”,3);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var testRow=newtestrow();
字符串表达式string=“r.Field[\“ColumnA\”]*r.Field[\“ColumnB\”];
var参数=Expression.parameter(typeof(TestRow),“r”);
var lambdaET=System.Linq.Dynamic.DynamicExpression.ParseLambda(新[]{parameter},typeof(float),expressionString);
var result=lambdaET.Compile().DynamicInvoke(testRow);
控制台写入线(结果);
Console.ReadLine();
}
}

有一个nuget包可以帮助您“System.Linq.Dynamic”。此示例代码适用于

 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();
    }
}
公共类TestRow
{
公共字典字段{get;set;}
公共测试行()
{
this.Field=新字典();
此字段添加(“ColumnA”,2);
本栏位添加(“B栏”,3);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var testRow=newtestrow();
字符串表达式string=“r.Field[\“ColumnA\”]*r.Field[\“ColumnB\”];
var参数=Expression.parameter(typeof(TestRow),“r”);
var lambdaET=System.Linq.Dynamic.DynamicExpression.ParseLambda(新[]{parameter},typeof(float),expressionString);
var result=lambdaET.Compile().DynamicInvoke(testRow);
控制台写入线(结果);
Console.ReadLine();
}
}