0

我有一个动态创建的类。我动态创建此类的属性并为这些属性添加值。到目前为止没有问题。但是,当我创建此类的列表并使用“Microsoft.EntityFrameworkCore.DynamicLinq”进行查询时,出现错误。如何创建动态类并使用“Microsoft.EntityFrameworkCore.DynamicLinq”查询此类类型的列表?最好的方法是什么?

我在下面分享了一个类似的代码。此代码给出错误。你能指导我吗?或者,如果您有可以分享的示例,我会很高兴。

错误:System.InvalidOperationException:'没有为类型'System.Object'和'System.Int32'定义二元运算符GreaterThan。'

        List<DynamicClass> schemas = new List<DynamicClass>();

        foreach (var item in Enumerable.Range(1,100))
        {
            Type schemaType = null;
            var props = new List<DynamicProperty>();

            props.Add(new DynamicProperty("Id", typeof(long)));
            props.Add(new DynamicProperty("Name", typeof(string)));
            props.Add(new DynamicProperty("Birthday", typeof(DateTime)));
            props.Add(new DynamicProperty("Age", typeof(int)));

            DynamicClass schemaClass = null;
            schemaType = DynamicClassFactory.CreateType(props);
            schemaClass = Activator.CreateInstance(schemaType) as DynamicClass;

            schemaClass.SetDynamicPropertyValue("Id", item);
            schemaClass.SetDynamicPropertyValue("Name", "Serkan");
            schemaClass.SetDynamicPropertyValue("Birthday", DateTime.Now.AddDays(item));
            schemaClass.SetDynamicPropertyValue("Age", DateTime.Now.Day + item);

            schemas.Add(schemaClass);
        }

        var query = schemas.AsQueryable().Where("(Id > @0 and Id < @1) or Id == @2", 10, 30, 31).OrderBy("Id"); // I'm getting the error I mentioned here
        var results = query.ToList();
4

1 回答 1

0
    IList CreateListFor(object obj)
    {
        Type t = typeof(List<>).MakeGenericType(obj.GetType());
        return (IList)Activator.CreateInstance(t);
    }

    IList CreateListFor(Type t)
    {
        Type lt = typeof(List<>).MakeGenericType(t);
        return (IList)Activator.CreateInstance(lt);
    }

    void Test()
    {
        var props = new List<DynamicProperty>();

        props.Add(new DynamicProperty("Id", typeof(int)));
        props.Add(new DynamicProperty("Name", typeof(string)));
        props.Add(new DynamicProperty("Birthday", typeof(DateTime)));
        props.Add(new DynamicProperty("Age", typeof(int)));

        var schemaType = DynamicClassFactory.CreateType(props);

        var schemas = CreateListFor(schemaType);

        foreach (var itemx in Enumerable.Range(1, 100))
        {
            var schemaClass = Activator.CreateInstance(schemaType) as DynamicClass;

            schemaClass.SetDynamicPropertyValue("Id", itemx);

            schemaClass.SetDynamicPropertyValue("Name", "Serkan");

            schemaClass.SetDynamicPropertyValue("Birthday", DateTime.Now.AddDays(itemx));

            schemaClass.SetDynamicPropertyValue("Age", DateTime.Now.Day + itemx);

            schemas.Add(schemaClass);
        }

        var query = schemas.AsQueryable();
        var results = query.Where("(Id > @0 and Id < @1) or Id == @2", 10, 30, 31); // I'm getting the error I mentioned here
    }
于 2022-01-21T00:38:13.930 回答