ниже код работает с StartsWith
и Contains
, но когда я попытался Equals
я получаю это исключение: Более один метод «Равно» на «System.String» типа совместим с указанными аргументами.Построить выражение Равно на строку
Чтобы возобновить, то CreatePredicate может построить 3 типа предиката, но только Equals
не работает:
AList.Where(x => x.MyField.StartsWith("ValueToSearch")); //OK
AList.Where(x => x.MyField.Contains("ValueToSearch")); //OK
AList.Where(x => x.MyField.Equals("ValueToSearch")); //Not OK
..
public enum TypeSearch
{
StartsWith = 1,
Contains = 2,
Equals = 3
}
private static Expression<Func<T, bool>> CreatePredicate<T>(string member, object value, TypeSearch type)
{
var p = System.Linq.Expressions.Expression.Parameter(typeof(T));
System.Linq.Expressions.Expression body = p;
foreach (var subMember in member.Split('.'))
{
body = System.Linq.Expressions.Expression.PropertyOrField(body, subMember);
}
var res = System.Linq.Expressions.Expression.Lambda<Func<T, bool>>(
System.Linq.Expressions.Expression.Call(
System.Linq.Expressions.Expression.Call(
body,
"ToUpper", null),
type.ToString(), null,
System.Linq.Expressions.Expression.Constant(value.ToString().ToUpper())
), p);
return res;
}
Что произойдет, если вы пройдете MethodInfo? –
MethodeInfo .... как я могу это сделать, а не специалист в выражении. –