IEnumerable работает, но тип или пространство имен IQueryable не могут быть найдены - MVC 5

Я использую MVC5 и пытаюсь составить простой список. Я использовал скаффолдинг, который создает модель как IQueryable в контроллере и IEnumerable в представлении. Я пытаюсь изменить представление так, чтобы оно также было IQueryable, но это представление выдает ошибки компиляции по "Типу или пространству имен" IQueryable "не может быть найден (вам не хватает директивы using или ссылки на сборку?)"

<!-- Index.cshtml -->
@using System.Linq    <!-- flags as 'previously appears in namespace' -->
@model IEnumerable<MyTableName> <!-- compiles and displays -->
@model IQueryable<MyTableName> <!-- doesn't compile, throws exception --> 

Все мои проекты 4.5.2. Я относительный новичок в MVC/EF. Я ссылаюсь на System.Core.dll как в моем веб-приложении, так и в проекте данных.

При запуске я получаю следующее исключение: ошибка CS1061: "IQueryable" не содержит определения для "MyTableName", и невозможно найти метод расширения "MyTableName", принимающий первый аргумент типа "IQueryable" (вы пропускаете использование директива или ссылка на сборку?)

Я хочу IQueryable, потому что 1) там много данных и 2) я буду использовать элементы управления Infragistics (которых на данный момент нет на странице). Я хочу получить только те данные, которые мне нужны. (Я новичок в области инфраструктуры, но все упоминания об инфраструктуре отсутствуют).

Какие-либо предложения? Спасибо!

2 ответа

В VIEWS\web.config (не web.config в корневом каталоге) добавить пространство имен System.Linq в следующий раздел:

<configuration>
  ...
  <system.web.webPages.razor>
    ...
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
         <add namespace="System.Linq" />

Вы хотите использовать IEnumerable в своем представлении, так как он делает объект IQueryable выполненным.

Из документации: "Интерфейс IQueryable наследует интерфейс IEnumerable, так что, если он представляет запрос, результаты этого запроса могут быть перечислены. При перечислении выполняется дерево выражений, связанное с объектом IQueryable".

Другие вопросы по тегам