1

我有一个Func<Message, bool>whereMessage是我的课程。

我建立一个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。

那可能吗?

谢谢

4

2 回答 2

1

使用ToUpper()

Message.GetPropertyValue("Gender").ToUpper() != "FEMALE"
于 2013-05-03T09:30:48.197 回答
0

这是从表达式生成的。

我相当确定字符串上的静态公共方法是通过 DynamicQuery 公开的,因此您需要 string.compare:

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

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

于 2013-05-03T09:40:28.697 回答