2013-08-25 268 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; 
} 

好运。