[英]Search by string field name
我需要建立按字符串字段名稱搜索。
例如此代碼:
SearchProvider.Search(records, "First", "S2");
應等於:
SearchProvider.Search(records, x => x.First, "S2");
問題:將字符串轉換為Linq lambda表達式。
我該怎么做?
您應該使用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;
}
祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.