0
static class QueryableExtensions
{
private static MethodInfo StringContainsMethod;
private static MethodInfo StringStartsWithMethod;
static QueryableExtensions()
{
Type[] singleStringParam = new[] { typeof(string) };
StringContainsMethod = typeof(string).GetMethod("Contains", singleStringParam);
StringStartsWithMethod = typeof(string).GetMethod("StartsWith", singleStringParam);
}
public static IQueryable<T> AppendTextFilter<T>(this IQueryable<T> queryable, Expression<Func<T, string>> memberSelector, string condition, string value)
{
Expression expression = null;
switch (condition)
{
case "StartsWith":
expression = Expression.Call(memberSelector.Body, StringStartsWithMethod, Expression.Constant(value));
break;
case "Equals":
expression = Expression.Equal(memberSelector.Body, Expression.Constant(value));
break;
case "Contains":
expression = Expression.Call(memberSelector.Body, StringContainsMethod, Expression.Constant(value));
break;
default:
throw new NotSupportedException(string.Format("'{0}' is not a supported condition", condition));
}
var lambda = Expression.Lambda<Func<T, bool>>(expression, memberSelector.Parameters);
return queryable.Where(lambda);
}
}
Google에서 검색 할 때 클래스보다 높습니다. 글쎄, 정말 많이 도움이 되긴하지만 여전히 내 필요를 충족시킬 수는 없습니다.
문제는 "string"유형의 필드 만 처리 할 수 있다는 것입니다. 위의 블록 코드에서 보았 듯이 메서드는 T, string 만 처리 할 수 있습니다.
단일 메서드 내에서 원하는 모든 유형을 처리하는 방법은 무엇입니까?dynamic linq express를 구성하십시오
음 ...
TValue
유형string
경우 적용 할 수StartsWith
로, 많은 이해가되지 않습니다 사전 Value.It에 익숙한 정말 날 도와. – user1539984@ user1539984 사전 값? 무슨 소리 야? –
오류가 있습니다. 사전 유형이어야합니다. – user1539984