Использование SqlQuery в ASP.NET MVC

У меня есть запрос в моем контроллере, который извлекает два столбца из базы данных, и я сохраняю его в переменной, чтобы вернуть его в представление. Я показываю данные с помощью таблицы. Ниже приведен код для этого:

Контроллер:

public ActionResult DisplayData(LabourTimeModel ltm)
    {

        LabourTimeEntities db = new LabourTimeEntities();
        string query = "Select ProcessItemName, sum(DATEDIFF(MINUTE, LaborTimeOut,LaborTimeIn)) AS 'TimeSpent' FROM LaborTime group by ProcessItemName";

        var data = db.Database.SqlQuery<LabourTimeModel>(query).ToList();

        return View(data);
    }

Вид:

@model List<LabourTime.Models.LabourTimeModel>

@{
    ViewBag.Title = "Labour Time - Home";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

    <h2><centre>Display Data</h2><hr />

            <table>
                  <tr>
                     <th colspan = "2">Time Spent For Process Item</th>
                  </tr>
                 <tr>
                   <th style = "padding:0 15px 0 15px;"> Process Item Name </th>
                      <th style = "padding:0 15px 0 15px;"> Time Spent </th>
                   </tr>
                @foreach (LabourTime.Models.LabourTimeModel obj in Model)
                    {
                  <tr>
                   <td style = "padding:0 15px 0 15px;">@obj.processItemName.ToString()</td>
                   <td style = "padding:0 15px 0 15px;">@obj.TimeSpent</td>
                    </tr>
                    }
           </table>

Это дает мне желаемый результат. Однако я хочу написать еще один запрос и передать его тому же представлению и отобразить еще одну таблицу, подобную этой. Как мне этого добиться? Любая помощь приветствуется, спасибо!

Вывод, который я получаю сейчас:

Column1     Column2
   A          20
   B          10
   C          45

Я хочу, чтобы под ним отображалась еще одна таблица.

Контроллер, который я пробовал:

    public ActionResult DisplayData(LabourTimeModel ltm)
    {

        LabourTimeEntities db = new LabourTimeEntities();
        string query = "Select ProcessItemName, sum(DATEDIFF(MINUTE, LaborTimeOut,LaborTimeIn)) AS 'TimeSpent' FROM LaborTime group by ProcessItemName";

string query1 = "ONE MORE QUERY"

        var data = db.Database.SqlQuery<LabourTimeModel>(query).ToList();
        var data1 = db.Database.SqlQuery<LabourTimeModel>(query1).ToList();

        return View(data);
    }

Но я не могу передать два результата, используя представление возврата. Я застрял здесь.

Вы хотите Посмотреть модель

Liam 14.09.2018 18:05

@Liam Спасибо!

user8205798 14.09.2018 20:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
1 046
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам необходимо создать модель представления (класс с двумя списками) и передать этот объект представлению.

var model = new MyModel {
   Data1 = your first query,
   Data2 = your second query
}

return View(model);

В представлении:

@model MyModel 

Вам кажется страдают от FGIW

Liam 14.09.2018 18:09

@Liam Я не знал, что у меня проблема! Но да ... это мое поведение :)

Romias 14.09.2018 18:12

@Romias Привет, спасибо за ответ. Как мне выполнить запрос, если я передаю запрос Data1 и Data2? Простите, но я не понял.

user8205798 14.09.2018 20:30

Вы также можете использовать анонимные типы, чтобы отправить обратно в ваше представление

   public ActionResult DisplayData(LabourTimeModel ltm)
{

    LabourTimeEntities db = new LabourTimeEntities();
    string query = "Select ProcessItemName, sum(DATEDIFF(MINUTE, LaborTimeOut,LaborTimeIn)) AS 'TimeSpent' FROM LaborTime group by ProcessItemName";

    string query1 = "ONE MORE QUERY"

    var data = db.Database.SqlQuery<LabourTimeModel>(query).ToList();
    var data1 = db.Database.SqlQuery<LabourTimeModel>(query1).ToList();

    dynamic viewModel = new ExpandoObject();
    viewModel.Query1= data;
    viewModel.Query2=data1;
    return View(viewModel);
}

На ваш взгляд, используйте это как

@Model.Query1.ColumnName

А что вы декларируете в View как модель? Никогда раньше не пробовал этот подход ...

Romias 14.09.2018 18:25

Просто используйте имена ключей при использовании свойств модели, таких как @ Html.TextBox ("Query1"). В случае типов списков вы можете объявить его так же, как вы объявляете свою модель, а затем привести ее к соответствующему типу.

Arun Kumar 14.09.2018 18:26

@ArunKumar Спасибо за ответ. Это так работает? Я получаю несколько столбцов для этих запросов. Как мне реализовать это в представлении?

user8205798 14.09.2018 20:31

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

Arun Kumar 14.09.2018 20:52

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