2013-08-25 83 views
1

我需要按字符串字段名稱進行搜索。按字符串搜索字段名稱

例如這樣的代碼:

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

應該等於:

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

該問題:將字符串轉換到LINQ lambda表達式。

我該怎麼做?

回答

2

你應該將字符串轉換爲使用Expression.Lambda例如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; 
} 

好運。