我有这个方法:
public IQueryable<T> List(HttpRequestMessage request)
{
var queryString = request.GetQueryNameValuePairs();
var models = _service.List();
foreach(var item in queryString)
models = models.Where(m => m.GetType().GetProperty(item.Key).GetValue(m).ToString().Contains(item.Value));
return models;
}
当我运行它时,我收到了这个错误:
LINQ to Entities无法识别方法&#39; System.Object GetValue(System.Object)&#39;方法,并且此方法无法转换为商店表达式。
我无法修复。有谁知道如何解决它或者可以告诉我在哪里可以找到它?
答案 0 :(得分:0)
我按照建议使用System.Linq.Dynamic
解决了这个问题,我能够做到这一点:
public class DataProvider<T> where T : class
{
private readonly IService<T> _service;
public DataProvider(IService<T> service) => _service = service;
public IQueryable<T> List(HttpRequestMessage request)
{
var queryString = request.GetQueryNameValuePairs();
var models = _service.List();
foreach (var item in queryString)
{
var query = $"{ item.Key }.ToString().Contains(\"{ item.Value }\")";
models = models.Where(query);
}
return models;
}
}
这使我能够使用泛型并解决我的问题:)