Я нашел много похожих вопросов, но ничего не дал ответ. Частично моя проблема связана с невозможностью использовать Generics в атрибутах.
Я, вероятно, пытаюсь слишком усложнить ситуацию, поэтому, если вы можете придумать более простой способ сделать это, я весь в ушах.
Моя конкретная проблема связана с ASP.NET MVC, использующим атрибуты (фильтры) в методе Action. Я пытаюсь создать фильтр, который разбивает на страницы результаты, переданные ViewData.Model, следующим образом:
[PagedList(PageSize = 2, ListType = typeof(Invoice))]
public ViewResult List()
{
var invoices = invoicesRepository.Invoices; // Returns an IQueryable<Invoice>
return View(Invoices);
}
Переопределение моего фильтра OnActionExecuted затем выглядит следующим образом:
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
ViewResult result = (ViewResult)filterContext.Result;
var list = (IQueryable<?>)result.ViewData.Model; // Here I want to use the ListType in place of the ?
// Perform pagination
result.ViewData.Model = list.Skip((Page - 1) * PageSize).Take(PageSize.ToList();
}
Я понимаю, что могу заменить свой
var list = (IQueryable<?>)result.ViewData.Model;
С
var list = (IQueryable)result.ViewData.Model;
IQueryable<Object> oList = list.Cast<Object>();
Но мой взгляд строго типичен, чтобы ожидать
IQueryable<Invoice>
не
IQueryable<Object>