2013-08-25 6 views
1

문자열 필드 이름으로 검색을 구축해야합니다.문자열 필드 이름으로 검색

예 코드 :

SearchProvider.Search(records, "First", "S2"); 

같 같아야

SearchProvider.Search(records, x => x.First, "S2"); 

문제 : Linq는 람다 식으로 열로 변환.

어떻게 할 수 있습니까?

답변

2

당신은 예를 들어 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; 
    } 
    

    행운을 빕니다 : 여기

은 예입니다.

관련 문제