我想使用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]'' .