首页 > 解决方案 > LINQ to Entities 无法识别方法“System.Object GetValue(System.Object)”

问题描述

我有这个方法:

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 无法识别方法“System.Object GetValue(System.Object)”方法,并且该方法无法转换为存储表达式。

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

标签: c#linq

解决方案


我按照建议使用解决了这个问题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;
    }
}

这让我可以使用泛型并解决我的问题:)


推荐阅读