我想使用Linq从 IQueryable<T> 动态选择列 . T是ContractDto(在这种情况下) .

目前我有

private static IQueryable<T> Select<T>(IQueryable<T> queryable, IEnumerable<string> columns)
    {
        LambdaExpression lambda = DynamicExpression.ParseLambda(queryable.ElementType, null, $"new ({string.Join(",", columns)})", queryable);

        MethodCallExpression select = Expression.Call(typeof(Queryable), "Select", new Type[] { queryable.ElementType, lambda.Body.Type }, Expression.Constant(queryable), Expression.Quote(lambda));
        return queryable.Provider.CreateQuery<T>(select);
    }

但是我收到了一个错误

System.InvalidCastException:'无法将'System.Data.Entity.Infrastructure.DbQuery1 [DynamicClass2]'类型的对象强制转换为'System.Linq.IQueryable1 [Business.Dto.ContractDto]'' .