繁体   English   中英

将 lambda 翻译成 sql 查询

[英]Translate lambda into sql query

我想将一个简单的 LambdaExpression 转换为 sql 查询。 我试图通过使用这样的 ExpressionTrees 来做到这一点:

Expression<Func<Person, bool>> exp = (person) => person.ID == 5;

当表达式中的常量右节点在哪里时,我可以检索数据并且得到这样的字典:

new Dictionary<string, object>() { { "ID", 5 } };

但是当右节点有属性访问时,我的代码失败了,因为无法将 MemberExpression 转换为 ConstantExpression。 例如,我无法从此 lambda 表达式中获取人员 ID 值:

Person person = new Person()
{
    ID = 1,
    Name = "Test",
    Lastname = "Test"
};

Expression<Func<Person, bool>> exp = (p) => p.ID == person.ID;

问题:当右节点有属性访问时,如何从 LambdaExpression 检索正文数据。

如果您想直接写下表达式,我认为您不能像这样使用人。 这不是“独立的”,而是来自外部。 如果您想写下表达式,您需要在表达式中使人员可访问。 据我了解,您正在寻找这样的东西:

public static Expression<Func<Person, bool>> GetPredicate(
    Person person)
{
    var parameter = Expression.Parameter(typeof(Person), "o");
    var propertyInfo = typeof(Person).GetProperty(nameof(Person.Name));
    var expression = Expression.Equal(
        Expression.Constant(propertyInfo.GetValue(person)),
        Expression.Property(parameter, propertyInfo));
    return Expression.Lambda<Func<Person, bool>>(expression, parameter);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM