gpt4 book ai didi

c# - 首先在表达式树中使用 ToString 方法

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

我是表达式树的新手,我需要将下面的 lambda 转换为表达式树

Data.Where(s => s.Property.ToString().StartsWith("My Search Data"));

但是我已经做到了

Data.Where(s => s.Property.StartsWith("My Search Data");

现在我需要在使用 StartsWith 之前使用 ToString 方法。

下面是我的示例代码。

ParameterExpression e = Expression.Parameter(typeof(T), "e");
PropertyInfo propertyInfo = typeof(T).GetProperty(field);
MemberExpression m = Expression.MakeMemberAccess(e, propertyInfo);
ConstantExpression c = Expression.Constant(data, typeof(string));
MethodInfo mi = typeof(string).GetMethod("StartsWith", new Type[] { typeof(string) });
Expression call = Expression.Call(m, mi, c);
Expression<Func<T, bool>> lambda = Expression.Lambda<Func<T, bool>>(call, e);
query = query.Where(lambda);

最佳答案

考虑使用允许您按名称访问成员的重载。这将使这变得更加容易。

// Data.Where(s => s.Property.ToString().StartsWith("My Search Data"));
var property = "Property";
var filter = "My Search Data";
var param = Expression.Parameter(typeof(T));
var body = Expression.Call(
Expression.Call(
Expression.Property(param, property),
"ToString",
null
),
"StartsWith",
null,
Expression.Constant(filter)
);
var lambda = Expression.Lambda<Func<T, bool>>(body, param);

关于c# - 首先在表达式树中使用 ToString 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34870767/

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