C# 按字符串字段名搜索
我需要建立搜索字符串字段名 例如,此代码:C# 按字符串字段名搜索,c#,.net,linq,expression,C#,.net,Linq,Expression,我需要建立搜索字符串字段名 例如,此代码: SearchProvider.Search(records, "First", "S2"); 应等于: SearchProvider.Search(records, x => x.First, "S2"); 问题:将字符串转换为Linq lambda表达式 如何执行此操作?您应该使用表达式将字符串转换为lambda表达式。lambda例如: public IQueryable<TModel> Search<TModel>
SearchProvider.Search(records, "First", "S2");
应等于:
SearchProvider.Search(records, x => x.First, "S2");
问题:将字符串转换为Linq lambda表达式
如何执行此操作?您应该使用
表达式将字符串转换为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;
}
publicIQueryable搜索(IQueryable模型、字符串选择器、字符串搜索)
{
var param=表达式参数(typeof(TModel),“x”);
var contains=Expression.Call(
Expression.PropertyOrField(参数,选择器),
“Contains”,null,表达式.常量(searchFor)
);
var谓词=Expression.Lambda(contains,param);
model=model.Where(谓词);
收益模型;
}
接下来,对于公平搜索,您应该做两件事:
- 搜索任何对象,而不仅仅是字符串
- 放下所有的弦
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;
}
publicIQueryable搜索(IQueryable模型、字符串选择器、对象搜索)
{
var param=表达式参数(typeof(TModel),“x”);
var-tostring=Expression.Call(
Expression.PropertyOrField(参数,选择器),
“ToString”,空,空
);
var-tolower=Expression.Call(
tostring,
“ToLower”,空,空
);
var contains=Expression.Call(
托洛尔,
“Contains”,null,表达式.常量(searchFor)
);
var谓词=Expression.Lambda(contains,param);
model=model.Where(谓词);
收益模型;
}
祝你好运