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