不区分大小写的函数

本文关键字:函数 大小写 不区 | 更新日期: 2023-09-27 18:12:02

我有一个Func<Message, bool>,其中Message是我的一个类。

我构建了一个Lambda并将其编译为Func<Message,bool>

public static Func<Classes.Message, bool> GetPredicate(string expression)
{
    Func<Classes.Message, bool> result = null;
    try
    {
        ParameterExpression parameter = Expression.Parameter(typeof(Classes.Message), "Message");
        var lambda = DynamicExpression.ParseLambda(new[] { parameter }, null, expression);
        result = lambda.Compile() as Func<Classes.Message, bool>;
    }
    catch (Exception e)
    {
        _log.Fatal(e);
    }
    return result;
}

结果是

Message => (((Message.ContainsProperty("Gender") == True) AndAlso (Message.GetPropertyValue("Gender") != "Female")) AndAlso (Message.ChannelString != "FacebookComment"))

后来,Func得到执行,但我想使它不区分大小写,所以当一个消息对象传入,但性别是"女性"不是"女性",它仍然返回一个true在bool。

这可能吗?

谢谢

不区分大小写的函数

Use ToUpper().

Message.GetPropertyValue("Gender").ToUpper() != "FEMALE"

这是由表达式生成的

我很确定字符串上的静态公共方法是通过DynamicQuery暴露的,所以你需要你的string.compare:

(x) => String.Compare (x.Gender, "Female", StringComparison.OrdinalIgnoreCase)

不幸的是,这意味着你不能使用类似sql的语法,但它应该解析并运行。