如何筛选自定义列
本文关键字:自定义 筛选 何筛选 | 更新日期: 2023-09-27 18:23:46
我正在尝试做如下操作,只是我想根据传递到函数中的参数进行筛选。下面的代码运行良好。
public void Test()
{
var clist = GetFilteredList("Scott");
}
public List<Customer> GetFilteredList1(string filterValue)
{
IQueryable<Customer> returnQuery = GetAll();
returnQuery = returnQuery.Where(x => x.FirstName.Contains(filterValue));
return returnQuery.ToList();
}
我试图做的事情是这样的。。。
public void Test()
{
var clist = GetFilteredList2("FirstName", "Scott");
}
public List<Customer> GetFilteredList2(string fieldName, string filterValue)
{
IQueryable<Customer> returnQuery = GetAll();
returnQuery = returnQuery
.Where(x => x.GetType().GetProperty(fieldName).GetValue(x).ToString()
.Contains(filterValue));
return returnQuery.ToList();
}
我知道这不太正确,我怀疑我需要以某种方式使用Expression类来构建自定义表达式,但我不太确定如何构建。Expression类中没有"Contains"或"Like"函数,那么我该如何为此构建自定义表达式呢?
像下面的代码一样更改获取查询。
returnQuery.Where(x => x.FirstName == "Scott").ToList();
我能够通过使用System.Linq.Expressions库来解决这个问题。类似这样的东西:
public static Expression<Func<T, bool>> LikeLambdaString<T>(string propertyName, string value)
{
var linqParam = Expression.Parameter(typeof(T), propertyName);
var linqProp = GetProperty<T>(linqParam, propertyName);
var containsFunc = Expression.Call(linqProp,
typeof(string).GetMethod("Contains"),
new Expression[] { Expression.Constant(value) });
return Expression.Lambda<Func<T, bool>>(containsFunc,
new ParameterExpression[] { linqParam });
}