在被调用的方法中使用 LinqToDb.Sql.Property<string> 将谓词解析为 System.Object 而不是数据模型

我正在尝试创建一种方法,该方法根据在 JSON 对象中传递的参数列表为通用 CRUD 动态构建过滤器。

参数类

[Serializable]
public class Parameter
{
    public string Name { get; set; }
    public string Value { get; set; }
    public DataType DataType { get; set; } = DataType.STRING;
    public Operator Operator { get; set; } = Operator.EQUAL;
    public bool IncludeInAutomaticFilter { get; set; } = true;
}

请求类

    [Serializable]
    public class Request
    {
        public List<Parameter> Parameters { get; set; }
        public dynamic Data { get; set; }
    }

构建器方法

    public static class QueryHelpers<T>
    {
        public static IQueryable<T> Filter(IQueryable<T> q,Request req)
        {
            var r = q;

            // Iterates the parameter list
            foreach (var param in req.Parameters)
            {
                // STRING
                if (param.DataType == DataType.STRING)
                {
                    switch (param.Operator)
                    {
                        case Operator.EQUAL:
                            r = r.Where(p => Sql.Property<string>(p,param.Name) == param.Value);
                            break;
                        }
                        // .... and so on
                    }
                }
                // .... and so on
            }
            return r;
        }
    }

使用

    public List<Data.Usuarios> GetList(Request req)
    {
        IQueryable<Data.Usuarios> q = from p in db.Usuarios
            orderby p.Nombre
            select p;

        // Build the filters
        q = QueryHelpers<Data.Usuarios>.Filter(q,req);
    }

JSON 请求对象

    {
      "parameters": [
        {
          "Name": "Nombre","Value": "ministra","Operator": 0,// EQUAL
          "DataType": 0  // STRING
        }
      ],"data": {}
    }

这会在构建器方法中引发以下错误:r = r.Where(p => Sql.Property<string>(p,param.Name) == param.Value);

'Property 'System.String Nombre' is not defined for type 'System.Object''

我使用的是 .Net Core 5.0.101 和 linq2db 3.2.3。

我做错了什么?也许这还没有完全实施?任何帮助将不胜感激。谢谢!

BBQ20097758258 回答:在被调用的方法中使用 LinqToDb.Sql.Property<string> 将谓词解析为 System.Object 而不是数据模型

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/975649.html

大家都在问