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”作为结果。我不想考虑搜索中的口音。