从字符串生成 lambda 表达式
本文关键字:lambda 表达式 字符串 | 更新日期: 2023-09-27 18:34:11
我需要将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);
我已经做了大量的谷歌搜索,但我做得不够。有什么建议吗?
我建议将查询存储在数据库中并使用LINQ执行,如下所示。
using (eEntities db = new eEntities())
{
string query = "select name,age,salary from employees"
var employees = db.Database.SqlQuery<Employee>(query).
}
请注意:员工是我的自定义类,其属性与查询相同。
有一个 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();
}
}