gpt4 book ai didi

c# - 为 string.Contains 构建表达式树

转载 作者:太空狗 更新时间:2023-10-29 23:40:01 24 4
gpt4 key购买 nike

<分区>

我正在努力构建一个表达式树,以便我可以动态地对某些数据进行过滤。

我想出了这个,但它在 var lambda = 处失败了行

foreach (var rule in request.Where.Rules)
{
var parameterExpression = Expression.Parameter(typeof(string), rule.Field);
var left = Expression.Call(parameterExpression, typeof(string).GetMethod("ToLower", Type.EmptyTypes));
var right = Expression.Constant(rule.Data.ToLower());
var method = typeof(string).GetMethod("Contains", new [] { typeof(string) });
var call = Expression.Call(left, method, right);
var lambda = Expression.Lambda<Func<T, bool>>(call, parameterExpression);
query = query.Where(lambda);
}

变量 rule有一个字段(例如“名称”),我想将其与 rule.Data 中的文本进行比较(前“汤姆”)。所以如果T.Name.Contains("tom");我希望查询包含记录,否则不包含。

变量 query类型为 IQueryable<T>

编辑:终于让它与这段代码一起工作了:

foreach (var rule in request.Where.Rules)
{
var parameter = Expression.Parameter(typeof(T), "x");
var property = Expression.Property(parameter, rule.Field);
var value = Expression.Constant(rule.Data);
var type = value.Type;
var containsmethod = type.GetMethod("Contains", new[] { typeof(string) });
var call = Expression.Call(property, containsmethod, value);
var lambda = Expression.Lambda<Func<T, bool>>(call, parameter);
query = query.Where(lambda);
}

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