表中有很多列想要比较列之间的字符串。假设用户输入“测试” 想要将输入数据(“测试”)与列(名称,代码)值进行比较。
多个条件是:
queryObject.SearchBy =“测试”
var columnsFilterMap = new Dictionary<string, Expression<Func<Entities.Setup.Gender, bool>>>
{
["Name"] = v => v.Name.Contains(queryObject.SearchBy),
["Code"] = v => v.Code.Contains(queryObject.SearchBy)
};
想在IQueryable
中应用上述条件,请遵循以下方法,但不起作用。
应用
query = query.ApplyFiltering(queryObject, columnsFilterMap);
扩展方法
public static IQueryable<T> ApplyFiltering<T>(this IQueryable<T> query,
IQueryObject queryObj,
Dictionary<string, Expression<Func<T, bool>>> columnsFilterMap)
{
var result = query;
if (string.IsNullOrWhiteSpace(queryObj.SearchBy))
return result;
foreach (var item in columnsFilterMap)
{
result = result.Where(columnsFilterMap[item.Key]);
}
return result;
}