2015-10-30 2 views
4

Я использую MVC5 и пытаюсь составить простой список. Я использовал строительные леса, которые создают модель как IQueryable в контроллере, и IEnumerable в представлении. Я пытаюсь изменить представление так же, как и IQueryable, но представление дает ошибки компиляции в «Тип или пространство имен« IQueryable »не удалось найти (вам не хватает директивы использования или ссылки на сборку?) 'IEnumerable работает, но тип или пространство имен IQueryable не удалось найти - MVC 5

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

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

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

Любые предложения? Благодаря!

+3

Не возвращайте «IQueryable» с полной остановки контроллеров. Вызовите 'ToList()' на нем, прежде чем вы его вернете, иначе вы столкнетесь с проблемами SELECT n + 1. Затем установите '@ model' в' List ' –

+0

вы можете предоставить полное сообщение об ошибке? – Grundy

+1

вы также можете объяснить, почему вам нужно IQueryable на ваш взгляд? – LiranBo

ответ

0

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

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

Я был очень взволнован, но это не имело значения. System.Linq ранее не было пространством имен в моем представлении \ web.config, я добавил его, очистил решение, остановил веб-сайт в IIS Express, закрыл и снова открыл Visual Studio, перестроил (все еще имел красную ошибку squiggly compile) и запустил (с тем же исключением, которое я теперь добавил к исходному вопросу). – CindyH

+0

CindyH это может быть потому, что вы не используете пространство имен для ссылки на класс модели? Как IQueryable Примечание: вы должны сделать все преобразования Logic и Queries на стороне контроллера, а не потому, что вы можете сделать это в представлении, что вы должны, большую часть времени я вижу людей с ASPX-фон делает такие вещи, которые нарушают шаблон MVC (без обид, просто говоря). С уважением – darkndream

+0

@darkndream Спасибо. Я фактически использую пространство имен для ссылки на класс модели, но будет ли это отличаться для IEnumerable vs IQueryable? Я не обижаюсь - я ценю подсказку! Я понимаю, что желание делать CRUD-логику на странице MVC нарушает шаблон MVC. К сожалению, я тоже новичок в компании, и я уже слишком сильно раскачивал лодку. – CindyH

0

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

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

+1

Согласен, но на самом деле это не затрагивает проблему OP, она обходит ее. Лучше сказать это как комментарий, как и все остальные. Проблема OP здесь вращается вокруг ссылок на пространства имен и типы. –

Смежные вопросы