我有一个通用类:
public class DataProvider<T> where T : class
{
private readonly IService<T> _service;
public DataProvider(IService<T> service) => _service = service;
public IQueryable<T> List(params string[] includes) => _service.List(includes);
}
现在我想根据任何查询字符串参数筛选结果。
例如,我想返回包含单词“special”但用于特定字段的项。查询字符串可能如下所示:
?title=特殊
我想用linq来过滤结果,但我不确定这是否可能。
我换了我的
列表
方法如下:
public IQueryable<T> List(HttpRequestMessage request, params string[] includes)
{
var queryString = request.GetQueryNameValuePairs();
var models = _service.List(includes);
// TODO: Do a contains linq query
}
有可能做这样的查找吗?或者我必须将泛型类型更改为如下类:
public class DataProvider<T> where T : Availability
{
private readonly IService<T> _service;
public DataProvider(IService<T> service) => _service = service;
public IQueryable<T> List(HttpRequestMessage request, params string[] includes)
{
var queryString = request.GetQueryNameValuePairs();
var models = _service.List(includes);
// TODO: Do a contains linq query
}
}
即使如此,我如何动态地查找属性?
我有这样的经历:
foreach (var item in queryString)
models = models.Where(m => m.GetType().GetProperty(item.Key).GetValue(m).ToString().Contains(item.Value));
有人知道怎么做吗?