Запрос соединения Linq отображается в виде MVC - PullRequest
5 голосов
/ 01 декабря 2010

Я пытаюсь отобразить запрос соединения linq в частичном веб-представлении.

Вот мой запрос в контроллере:

public ActionResult InactiveUsers()
        {
            using (ModelContainer ctn = new ModelContainer())
            {
                DateTime duration = DateTime.Now.AddDays(-3);

                var inactive = from usrs in ctn.aspnet_Users
                               where usrs.LastActivityDate <= duration
                               join o in ctn.Groups on
                               usrs.UserId equals o.UserID
                               select new
                               {
                                   usrs.UserName,
                                   usrs.LastActivityDate,
                                   o.PrimaryPhoneNumber,
                               };

                return View(inactive.ToList());
            }

        }

Что меня смущает, так это что делать дальше. Я знаком с добавлением строго типизированных представлений с использованием моделей, но что происходит в моем случае, когда у меня есть запрос на соединение?

Если бы кто-нибудь мог указать мне правильное направление, я был бы очень благодарен.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 01 декабря 2010

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

При использовании этого шаблона мы создаем строго типизированные классы, которые оптимизирован для нашего конкретного взгляда сценарии, и которые выставляют свойства для динамических значений / необходимого контента по нашим шаблонам просмотра. Наш контроллер классы могут затем заполнить и передать эти оптимизированные для просмотра классы для нашего просмотреть шаблон для использования. Это позволяет безопасность типов, проверка во время компиляции, и редактор intellisense в поле зрения шаблоны.

3 голосов
/ 01 декабря 2010

Вместо того, чтобы возвращать IEnumerable анонимных типов, вы можете создать класс для результата объединения, а затем создать модель для него как обычно:

            var inactive = from usrs in ctn.aspnet_Users
                           where usrs.LastActivityDate <= duration
                           join o in ctn.Groups on
                           usrs.UserId equals o.UserID
                           select new InactiveUser(usrs.UserName, usrs.LastActivityDate, o.PrimaryPhoneNumber);

С классом InactiveUser, у которого есть конструктор, который принимаетимя пользователя, дата и номер телефона.

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