C# 字段名为ToUpper的表达式谓词

C# 字段名为ToUpper的表达式谓词,c#,linq,predicate,C#,Linq,Predicate,我有以下代码: public static Expression<Func<T, bool>> CreatePredicate<T>(string typeSearch, string searchField, string stringToSearch) { var parameter = Expression.Parameter(typeof(T)); var predicate = Expression.Lambda<Func<

我有以下代码:

public static Expression<Func<T, bool>> CreatePredicate<T>(string typeSearch, string searchField, string stringToSearch)
{
    var parameter = Expression.Parameter(typeof(T));
    var predicate = Expression.Lambda<Func<T, bool>>(
        Expression.Call(
            Expression.PropertyOrField(parameter, searchField),
            "Contains", null,
            Expression.Constant(stringToSearch.ToUpper())), parameter);

    return predicate;
}
公共静态表达式CreatePredicate(字符串类型搜索、字符串搜索字段、字符串stringToSearch)
{
var参数=表达式参数(typeof(T));
var谓词=表达式.Lambda(
表情,打电话(
Expression.PropertyOrField(参数,searchField),
“包含”,空,
常量(stringToSearch.ToUpper())、参数);
返回谓词;
}
结果是:
{Param_0=>Param_0.Username.Contains(“MX”)}

但是我希望:
{Param_0=>Param_0.Username.ToUpper().Contains(“MX”)}

谢谢,

公共静态表达式CreatePredicate(字符串类型搜索、字符串搜索字段、字符串字符串字符串搜索)
public static Expression<Func<T, bool>> CreatePredicate<T>(string typeSearch, string searchField, string stringToSearch)
{
    var parameter = Expression.Parameter(typeof(T));
    var predicate = Expression.Lambda<Func<T, bool>>(
        Expression.Call(
            Expression.Call(Expression.PropertyOrField(parameter, searchField), "ToUpper", null),
            "Contains", null,
            Expression.Constant(stringToSearch.ToUpper())), parameter);

    return predicate;
}
{ var参数=表达式参数(typeof(T)); var谓词=表达式.Lambda( 表情,打电话( Expression.Call(Expression.PropertyOrField(参数,searchField),“ToUpper”,null), “包含”,空, 常量(stringToSearch.ToUpper())、参数); 返回谓词; }
作为旁注:您应该为您的
ToUpper
奖金指定
InvariantCulture
。我有一些带重音“é,è,…”字母的字符串。有没有办法把“é”当作“e”?你必须研究
CultureInfo culture
ToUpper的参数。我不理解你的问题。首先编写正常的、非生成的代码,这符合您的要求,然后将其转换为表达式。当我在“élève”(英语学生)上搜索时,我用“eve”搜索contains,我没有结果,但我用“ève”搜索结果。我想如果我用“ève”或“eve”搜索得到“èlève”作为结果。我不想考虑搜索中的口音。