I'm sure someone has tried to do something like this before, but I'm unsure if what I'm finding in my searches fits what I'm trying to do.
In my .Net 6 Web API I have a class to get data passed by the request:
public abstract class QueryStringParameters {
    private readonly int _maxPageSize = Constants.DefaultPageSizeMax;
    private int _pageSize = Constants.DefaultPageSize;
    public int? PageNumber { get; set; } = 1;
    public int? PageSize {
        get => _pageSize;
        set => _pageSize = value > _maxPageSize ? _maxPageSize : value ?? Constants.DefaultPageSize;
    }
    public string OrderBy { get; set; }
    public string Fields { get; set; }
}
For each controller I create a view model which inherits from this:
public class ProgramParameters : QueryStringParameters {
    public bool MapDepartment { get; set; } = true;
    public bool MapAnother1 { get; set; } = true;
    public bool MapAnother2 { get; set; } = true;
    
    ...
    public ProgramParameters() {
        // Default OrderBy
        OrderBy = "Id";
    }
}
This works fine when calling an endpoint expecting multiple results and single results. However, I want to split the QueryStringParameters properties that are for pagination, something like this:
public abstract class QueryStringParameters {
    public string Fields { get; set; }
}
public abstract class QueryStringParametersPaginated : QueryStringParameters {
    private readonly int _maxPageSize = Constants.DefaultPageSizeMax;
    private int _pageSize = Constants.DefaultPageSize;
    public int? PageNumber { get; set; } = 1;
    public int? PageSize {
        get => _pageSize;
        set => _pageSize = value > _maxPageSize ? _maxPageSize : value ?? Constants.DefaultPageSize;
    }
    public string OrderBy { get; set; }
}
The problem is that then my view modal looks like this:
public class ProgramParameters : QueryStringParameters {
    public bool MapDepartment { get; set; } = true;
    public bool MapAnother1 { get; set; } = true;
    public bool MapAnother2 { get; set; } = true;
    
    ...
    public ProgramParameters() {
    }
}
public class ProgramParametersPaginated : QueryStringParametersPaginated {
    public bool MapDepartment { get; set; } = true; // repeated
    public bool MapAnother1 { get; set; } = true; // repeated
    public bool MapAnother2 { get; set; } = true; // repeated
    
    ...
    public ProgramParameters() {
        // Default OrderBy
        OrderBy = "Id";
    }
}
How can I rewrite this so that ProgramParameters and ProgramParametersPaginated don't have to have the same properties (MapDepartment, MapAnother1, MapAnother2) defined in both?
I tried something like this but that's not allowed and I am unsure how to proceed.
public class ProgramParametersPaginated : ProgramParameters, QueryStringParametersPaginated {
    public ProgramParametersPaginated() {
        // Default OrderBy
        OrderBy = "Id";
    }
}
 
    