1
문자열 필드 이름으로 검색을 구축해야합니다.문자열 필드 이름으로 검색
예 코드 :
SearchProvider.Search(records, "First", "S2");
같 같아야
SearchProvider.Search(records, x => x.First, "S2");
문제 : Linq는 람다 식으로 열로 변환.
어떻게 할 수 있습니까?
문자열 필드 이름으로 검색을 구축해야합니다.문자열 필드 이름으로 검색
예 코드 :
SearchProvider.Search(records, "First", "S2");
같 같아야
SearchProvider.Search(records, x => x.First, "S2");
문제 : Linq는 람다 식으로 열로 변환.
어떻게 할 수 있습니까?
당신은 예를 들어 Expression.Lambda
를 사용하여 람다 식에 문자열을 변환해야합니다 : 공정한 검색
public IQueryable<TModel> Search<TModel>(IQueryable<TModel> model, string selector, string searchFor)
{
var param = Expression.Parameter(typeof(TModel), "x");
var contains = Expression.Call(
Expression.PropertyOrField(param, selector),
"Contains", null, Expression.Constant(searchFor)
);
var predicate = Expression.Lambda<Func<TModel, bool>>(contains, param);
model = model.Where(predicate);
return model;
}
다음 두 가지를 수행해야합니다 어떤을위한
public IQueryable<TModel> Search<TModel>(IQueryable<TModel> model, string selector, object searchFor)
{
var param = Expression.Parameter(typeof(TModel), "x");
var tostring = Expression.Call(
Expression.PropertyOrField(param, selector),
"ToString", null, null
);
var tolower = Expression.Call(
tostring,
"ToLower", null, null
);
var contains = Expression.Call(
tolower,
"Contains", null, Expression.Constant(searchFor)
);
var predicate = Expression.Lambda<Func<TModel, bool>>(contains, param);
model = model.Where(predicate);
return model;
}
행운을 빕니다 : 여기
은 예입니다.