1
아래 코드는
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 .... Expression에서 전문가가 아닌 어떻게이 작업을 수행 할 수 있습니까? –