Мне нужно преобразовать результат хранимой процедуры в файле dbml в IQueryable, чтобы просмотреть список в представлении MVC - PullRequest
0 голосов
/ 06 мая 2010

У меня есть проект MVC, в котором есть класс Linq to SQL dbml. Это таблица под названием «Клиенты», в которой хранится информация о клиентах. Я легко могу получить информацию для отображения в представлении, используя код, которым следовал в Nerd Dinner, но я добавил хранимую процедуру в dbml, и его набор результатов имеет IQueryable, а не IQueryable. Мне нужно конвертировать IQueryable в IQueryable, чтобы я мог отобразить его в том же представлении. Причина этого заключается в том, что я могу передать строку поиска в sproc и вернуть ту же информацию, что и полный список, но отфильтрованную при поиске. Я знаю, что могу использовать Linq для фильтрации всего списка, но мне не нужен весь список, поэтому я использую sproc.

Вот код в моем ClientRepository с комментарием, куда мне нужно конвертировать. Какой код идет в прокомментированном месте.

        public IQueryable<Client> SelectClientsBySearch(String search)
    {
        IQueryable<SelectClientsBySearchResult> spClientList = (from p in db.SelectClientsBySearch(search) select p).AsQueryable();

        //what is the code to convert IQueryable<SelectClientsBySearchResult> to IQueryable<Client>

        return clientList;
    }

1 Ответ

3 голосов
/ 06 мая 2010

Если ваш тип результата и ваш тип клиента совпадают (IOW, ваш sproc возвращает Select * from Client, и вы не изменили сущность Client в DBML с момента ее добавления), вы можете изменить сохраненный процесс для автоматического возврата IQueryable из Клиент вместо IQueryable для SelectClientsBySearchResult (см. Инструкции ниже). Тогда никакое преобразование не требуется.

Если они разные, есть несколько разных подходов. Вы можете изменить частичный класс для ваших сущностей, чтобы добавить к ним методы преобразования, или вы можете использовать методы расширения. Оба этих подхода позволяют избежать перезаписи при регенерации кода за DBML.

Чтобы изменить тип возвращаемого хранимого процесса:

Дизайнер DBML создал тип SelectClientsBySearchResult для вашего сохраненного процесса, когда вы добавили сохраненный процесс в DBML. Это поведение по умолчанию, если вы перетаскиваете proc из проводника сервера на панель процедур. Вместо этого перетащите сохраненный процесс из обозревателя серверов и поместите его в таблицу Client. Теперь его типом возврата является коллекция Client.

Я полагаю, что вы также можете изменить тип возвращаемого значения после факта (как сейчас), но я не установил его прямо сейчас и не могу провести вас через него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...