不区分大小写的Func

时间:2013-05-03 09:20:35

标签: c# .net linq lambda

我有一个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会被执行,但我想让它不区分大小写,所以当一个Message objet传入但性别为“女性”而不是“女性”时,它仍会返回true布尔。

这可能吗?

由于

2 个答案:

答案 0 :(得分:1)

使用ToUpper()

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

答案 1 :(得分:0)

这是从表达式生成的。

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

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

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