我需要将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);
我已经完成了大量的谷歌搜索,但我已经做空了。有什么建议吗?
答案 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();
}
}