gpt4 book ai didi

.net - 我可以使用 LINQ 表达式参数化 PropertyExpression 的属性名称吗?

转载 作者:行者123 更新时间:2023-12-02 15:48:19 25 4
gpt4 key购买 nike

假设我有以下 LambdaExpression:

var itemParam = Expression.Parameter(typeof(Thing), "thing");
var someValue = "ABCXYZ123"; // value to compare

LambdaExpression lex = Expression.Lambda(
Expression.Equal(
Expression.Property(itemParam, "Id"), // I want ID to be a Body expression parameter
Expression.Constant(someValue)
), itemParm);

我希望将 Expression.Property(...) 工厂中的属性名称(第二个参数)作为参数,我该如何执行此操作?

我希望看到一个如下所示的构造函数,但它不存在:

Expression.Property(表达式实例,表达式propName)

是否有一些技巧可以将参数化的 ConstantExpression 转换为所需的字符串或 MemberInfo?也许我的处理方式是错误的。

我的预感是,由于这些表达式树在编译后会成为轻量级 IL,因此需要成员访问信息,因此在构造表达式树时必须提供成员名称和属性。

感谢您的任何提示!!

编辑:想要添加一点,这将用作 Enumerable.Where(...) 扩展方法的参数,用于确定两个类/实体之间关系的匹配。

最佳答案

表达式树表示的 IL 结构大致与您在 C#/VB.NET 程序中看到的类型相同。您无法参数化该属性表达式,其原因与您无法“参数化”以下代码的原因相同:

var x = new MyClass {Id = 1, Name = "hello"};
var propName = "Id";
var xId = x.propName; // <-- This will not compile

如果您需要实现此功能,并且您的表达式树未传递到 IQueryable<T> ,您可以编写一个辅助函数,它接受一个对象和一个字符串,并返回由该字符串标识的该对象的属性值;那么你可以使用Expression.Call将该辅助函数调用到您正在构建的表达式树中。

关于.net - 我可以使用 LINQ 表达式参数化 PropertyExpression 的属性名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8823589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com