MethodCallExpression LINQ选择语句

时间:2018-12-10 03:01:07

标签: c# linq

我想使用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.DbQuery'1 [DynamicClass2]'的对象转换为类型为'System.Linq.IQueryable'1 [Business.Dto.ContractDto]'。

0 个答案:

没有答案