LINQ to Entities无法识别方法' System.Object GetValue(System.Object)'

时间:2018-06-03 14:51:30

标签: c# linq

我有这个方法:

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;方法,并且此方法无法转换为商店表达式。

我无法修复。有谁知道如何解决它或者可以告诉我在哪里可以找到它?

1 个答案:

答案 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;
    }
}

这使我能够使用泛型并解决我的问题:)