gpt4 book ai didi

c# - 如何将Binding Expression left 和 right 转换为lower?

转载 作者:行者123 更新时间:2023-11-30 20:31:41 25 4
gpt4 key购买 nike

我正在使用下面的代码生成动态绑定(bind)表达式;这里如何将表达式的左右部分转换为较低的?因为我想过滤小写和大写过滤器。

private static Expression GetExpression<T>(ParameterExpression param, Filter filter)
{
MemberExpression member = Expression.Property(param, filter.PropertyName);
ConstantExpression constant = Expression.Constant(filter.Value);

switch (filter.Operation)
{
case Op.Equals:
return Expression.Equal(member, constant);

case Op.GreaterThan:
return Expression.GreaterThan(member, constant);

case Op.GreaterThanOrEqual:
return Expression.GreaterThanOrEqual(member, constant);

case Op.LessThan:
return Expression.LessThan(member, constant);

case Op.LessThanOrEqual:
return Expression.LessThanOrEqual(member, constant);

case Op.Contains:
return Expression.Call(member, containsMethod, constant);

case Op.StartsWith:
return Expression.Call(member, startsWithMethod, constant);

case Op.EndsWith:
return Expression.Call(member, endsWithMethod, constant);
}

return null;
}

最佳答案

如果我理解正确,那么您可以使用以下内容:

MemberExpression member = Expression.Property(param, filter.PropertyName);
ConstantExpression constant = Expression.Constant(filter.Value);

Expression left = Expression.Call(member, typeof(string).GetMethod("ToLower", System.Type.EmptyTypes));
Expression right = Expression.Call(constant, typeof(string).GetMethod("ToLower", System.Type.EmptyTypes));

在您的开关中,将 member 替换为 left 并将 constant 替换为 right

关于空检查的更新
您可以通过以下方式检查成员属性是否为空:(假设 originalExpression 包含来自 switch 的表达式)

var nullCheck = Expression.Equal(member, Expression.Constant(null, member.Type));

Expression.IfThenElse(nullCheck, Expression.Constant(false), originalExpression);

Expression.Conditional(nullCheck, Expression.Constant(false), originalExpression);

更新 2
您应该检查属性和值上的空值:

var nullCheckProp = Expression.Equal(member, Expression.Constant(null, member.Type)); 
var nullCheckVal = Expression.Equal(constant, Expression.Constant(null, constant.Type));
var nullCheckBoth = Expression.OrElse(nullCheckProp,nullCheckVal);

Expression.Conditional(nullCheckBoth, Expression.Constant(false), originalExpression);

关于c# - 如何将Binding Expression left 和 right 转换为lower?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42803007/

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