8 / 7 / 1
Регистрация: 19.12.2020
Сообщений: 51

Запрос в БД из ASP.NET8

25.04.2024, 11:39. Показов 1864. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! в курсовой осталось сделать один запрос в базу не знаю с какой стороны к нему подступиться, может у кого будут идеи. Есть следующие связанные таблицы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
 [Table("Order")]
 public class Order
 {
     public int Id { get; set; }
     [Required]
     public string UserId { get; set; }
     [Display(Name = "Дата создания")]          
     public DateTime CreateDate { get; set; } = DateTime.Now;
     public bool IsDeleted { get; set; } = false;
 
     [Required]
     [EmailAddress]
     [MaxLength(30)]
     [Display(Name = "Электронный адрес")]
     public string? Email { get; set; }
 
     [DataType(DataType.DateTime)]
     [DisplayFormat(DataFormatString = "{0:yyyy-MM-ddTHH}", ApplyFormatInEditMode = true)]
     [Display(Name = "Дата посещения")]
     public DateTime DateTime { get; set; }
 
     public List<OrderDetail> OrderDetail { get; set; }
 }
 [Table("OrderDetail")]
 public class OrderDetail
 {
     public int Id { get; set; }
     [Required]
     public int OrderId { get; set; }
     [Required]
     public int ProductId { get; set; }
     public int SheduleID { get; set; }
     [Required]
     [Display(Name = "Количество")]
     public decimal Quantity { get; set; }
     [Required]
     [Display(Name = "Цена")]
     public decimal UnitPrice { get; set; }
 
     [DataType(DataType.DateTime)]
     [DisplayFormat(DataFormatString = "{0:yyyy-MM-ddTHH}", ApplyFormatInEditMode = true)]
     [Display(Name = "Дата посещения")]
     public DateTime DateTime { get; set; }
     public Order? Order { get; set; }
     public Product? Product { get; set; }
     public IEnumerable<Product>? Details { get; set; }
 }
public class Product
{
    public int ProductID { get; set; }
 
    [Display(Name = "Название")]
    public string? Name { get; set; }
 
    [Display(Name = "Цена")]
    public decimal price { get; set; }
 
    [Display(Name = "Фото")]
    public string? Photo { get; set; }
 
    [Display(Name = "Слаг")]
    public string? Slug { get; set; }
 
    [Required, MinLength(4, ErrorMessage = "Minimum length is 2")]
    [Display(Name = "Описание")]
    public string? Description { get; set; }
 
    [Display(Name = "Доступность")]
    public bool available { get; set; }
    [Display(Name = "Категория")]
    public int CategoryID { get; set; }
    [Display(Name = "Категория")]
    public Category? Category { get; set; }     
}
public class Category
{
    public int CategoryID { get; set; }
    [Display(Name = "Название")]
    public string? categoryName { get; set; }
    [Display(Name = "Описание")]
    public string? categoryDescription { get; set; }
    [Display(Name = "Слаг")]
    public string? Slug { get; set; }
    public ICollection<Product>? Products { get; set; }
}
если мне нужно получить всю информацию по заказам, то в ASP.NET8 это выглядит примерно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
 public IActionResult Index()
 {
     var Orders = new OrderAdminOtchet//класс отображения-его нет в базе
     {
         Orders = _context.Order
                     .Include(x => x.OrderDetail)
                     .ThenInclude(x => x.Product)
                     .ThenInclude(x => x.Category)
                     .ToList().OrderBy(x => x.DateTime)
     };     
     return View(Orders);
 }
При таком запросе в представление выводятся все заказы(тематика ледовый дворец - сеансы массовых катаний, в одном сеансе может быть много заказов). в заказ входят три вида билетов с разной ценой и коньки - у всех есть поле количество.Мне нужно вывести все заказы, но чтобы в строке выводилось количество проданных билетов,коньков за сеанс а не за каждый отдельный заказ, т.е. надо просуммировать поля количество с одинаковой датой сеанса, и было бы не плохо сразу выбирать только дату, количество и цену, т.к. модель OrderDetail содержит поля которые не надо выводить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2024, 11:39
Ответы с готовыми решениями:

Могу ли я отправить запрос к Web-сервису через SOAP протокол в ASP(не ASP.net)???
Сразу извиняюсь - запутался совсем. Могу ли я отправить запрос к Web-сервису через SOAP протакол в ASP(не ASP.net)??? И как?...

Запись в Access из *asp ошибка: В операции должен использоваться обновляемый запрос. /Tutorial/GuestBook1.asp, line 79
Пытаюсь из файла - asp переслать данные в базу данных, нихрена не получается, появляется ошибка: Тип ошибки: Microsoft JET Database...

NET8
Так... что-то я гнать и тормозить начал - помогите, плз. Есть сервак с базой в локалке (с внутренним IP), есть внешний комп с реальным IP....

24
8 / 7 / 1
Регистрация: 19.12.2020
Сообщений: 51
26.04.2024, 13:36  [ТС]
Студворк — интернет-сервис помощи студентам
CREATE TABLE [Categories] (
[CategoryID] int NOT NULL IDENTITY,
[categoryName] nvarchar(max) NULL,
[categoryDescription] nvarchar(max) NULL,
[Slug] nvarchar(max) NULL,
CONSTRAINT [PK_Categories] PRIMARY KEY ([CategoryID])
);

CREATE TABLE [Products] (
[ProductID] int NOT NULL IDENTITY,
[Name] nvarchar(max) NULL,
[price] int NOT NULL,
[Photo] nvarchar(max) NULL,
[Slug] nvarchar(max) NULL,
[Description] nvarchar(max) NOT NULL,
[available] bit NOT NULL,
[CategoryID] int NOT NULL,
[Discriminator] nvarchar(8) NOT NULL,
[OrderDetailId] int NULL,
[Size] int NULL,
CONSTRAINT [PK_Products] PRIMARY KEY ([ProductID]),
CONSTRAINT [FK_Products_Categories_CategoryID] FOREIGN KEY ([CategoryID]) REFERENCES [Categories] ([CategoryID]) ON DELETE CASCADE,
CONSTRAINT [FK_Products_OrderDetail_OrderDetailId] FOREIGN KEY ([OrderDetailId]) REFERENCES [OrderDetail] ([Id])
);

CREATE TABLE [Order] (
[Id] int NOT NULL IDENTITY,
[UserId] nvarchar(max) NOT NULL,
[CreateDate] datetime2 NOT NULL,
[IsDeleted] bit NOT NULL,
[Email] nvarchar(30) NOT NULL,
[DateTime] datetime2 NOT NULL,
CONSTRAINT [PK_Order] PRIMARY KEY ([Id])
);

CREATE TABLE [OrderDetail] (
[Id] int NOT NULL IDENTITY,
[OrderId] int NOT NULL,
[ProductId] int NOT NULL,
[SheduleID] int NOT NULL,
[Quantity] int NOT NULL,
[UnitPrice] int NOT NULL,
[DateTime] datetime2 NOT NULL,
[OrderDetailId] int NULL,
CONSTRAINT [PK_OrderDetail] PRIMARY KEY ([Id]),
CONSTRAINT [FK_OrderDetail_OrderDetail_OrderDetailId] FOREIGN KEY ([OrderDetailId]) REFERENCES [OrderDetail] ([Id]),
CONSTRAINT [FK_OrderDetail_Order_OrderId] FOREIGN KEY ([OrderId]) REFERENCES [Order] ([Id]) ON DELETE CASCADE
);

CREATE TABLE [Shedules] (
[SheduleID] int NOT NULL IDENTITY,
[SheduleName] nvarchar(max) NULL,
[Trener] nvarchar(max) NULL,
[DateTime] datetime2 NOT NULL,
CONSTRAINT [PK_Shedules] PRIMARY KEY ([SheduleID])
);

Остальные таблицы тут вроде бы не нужны. Администратор создает 5 объектов Product - Билет Взрослый(Name) 200руб(price), Билет Детский 100руб, Билет Зрительский 50руб, Коньки женские 100руб, коньки мужские -100руб.

В итоговой таблице в первом столбце должно выводится время сеанса массового катания из таблицы(OrderDetail).В одном сеансе может быть много заказов,но надо чтобы результат выводился целиком за сеанс,т.е. итоговая таблица должна выглядеть так:
ВремяСеансаМассовогоКатания/Кол-воБилетВзрослый/Сумма/КолБилетДетский/Сумма/КолБилетЗрительский/Сумма/КолКоньки/Сумма/ИтогСуммаЗаСеанс

В столбце кол-во билетов надо выводить сумму билетов определенного типа за сеанс.В столбце сумма выводиться результат умножения количества на цену данного товара за сеанс и т.д. коньки выводятся одним столбцом, т.к. цена у них одинаковая. И последний столбец.Итоговая сумма за сеанс.

там надо конечно еще делать выборку за несколько сеансов или за какой-то конкретный сеанс(даты вводит на форме администратор),но мне б посмотреть просто вывод всех сеансов.
0
 Аватар для Andrey-MSK
3392 / 2278 / 388
Регистрация: 14.08.2018
Сообщений: 7,703
Записей в блоге: 4
26.04.2024, 14:01
Dzygun Roman, Скрипт данных в этих таблицах сделайте.

Добавлено через 12 минут
Цитата Сообщение от Dzygun Roman Посмотреть сообщение
ВремяСеансаМассовогоКатания
Это из какой таблицы? Shedules или OrderDetail
0
8 / 7 / 1
Регистрация: 19.12.2020
Сообщений: 51
26.04.2024, 14:04  [ТС]
время сеанса из таблицы OrderDetail, Shedule здесь не надо.
0
 Аватар для Andrey-MSK
3392 / 2278 / 388
Регистрация: 14.08.2018
Сообщений: 7,703
Записей в блоге: 4
26.04.2024, 14:23
Dzygun Roman, Без данных не проверить, но если правильно понял, то нечто типа такого
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
SELECT
    od.[DateTime], 
    CASE
        WHEN p.[Name] = N'Взрослый'
        THEN SUM(ISNULL(od.Quantity, 0))
        ELSE 0
    END AS Q01,
    CASE
        WHEN p.[Name] = N'Взрослый'
        THEN SUM(ISNULL(od.Quantity, 0) * p.price)
        ELSE 0
    END AS S01,
    CASE
        WHEN p.[Name] = N'Детский'
        THEN SUM(ISNULL(od.Quantity, 0))
        ELSE 0
    END AS Q02,
    CASE
        WHEN p.[Name] = N'Детский'
        THEN SUM(ISNULL(od.Quantity, 0) * p.price)
        ELSE 0
    END AS S02,
    CASE
        WHEN p.[Name] = N'Зрительский'
        THEN SUM(ISNULL(od.Quantity, 0))
        ELSE 0
    END AS Q03,
    CASE
        WHEN p.[Name] = N'Зрительский'
        THEN SUM(ISNULL(od.Quantity, 0) * p.price)
        ELSE 0
    END AS S03,
    CASE
        WHEN p.[Name] = N'Коньки'
        THEN SUM(ISNULL(od.Quantity, 0))
        ELSE 0
    END AS Q04,
    CASE
        WHEN p.[Name] = N'Коньки'
        THEN SUM(ISNULL(od.Quantity, 0) * p.price)
        ELSE 0
    END AS S04,
    SUM(od.Quantity * p.price) AS Total
FROM
    OrderDetail od 
    LEFT JOIN
    Products p ON p.ProductID = od.ProductId
GROUP BY
    od.Quantity, od.[DateTime], p.[Name]
Запустите и покажите что выдаст. Ошибки тоже показывайте

Добавлено через 1 минуту
Про поведение CASE не очень уверен что правильно сработает. Данные нужны...
0
8 / 7 / 1
Регистрация: 19.12.2020
Сообщений: 51
27.04.2024, 12:55  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
OrderDetails = _context.OrderDetails
            .Include(x => x.Product)
            .ThenInclude(x => x.Category)
            .Where(x => x.ProductId == x.Product.ProductID)
            .GroupBy(x => new { x.DateTime, x.UnitPrice, x.ProductId })
            .Select(g => new OrderDetail {
                DateTime = g.Key.DateTime,
                ProductId = g.Key.ProductId,
                UnitPrice = g.Key.UnitPrice,
                Quantity = g.Sum(x => x.Quantity)
            }).OrderBy(x => x.DateTime)
            .ToList()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.04.2024, 12:55

Проблемы с Net8
Доброе время суток! Помогите пожалуйста с советом. На unix-e стоит oracle 8. Install-a нет, получил готовым tar-ом. На свою машину...

Установка Oracle на P-4 - зависает Net8 Assistant
Подскажите, кто знает! Устанавливаю Oracle на машину с процом 3Гг. Установка проходит успешно, но после Net8 Assistant запускается и...

Скомпилировать и запустить приложение NET8.0 на ubuntu 22.04
Здравствуйте. Ранее приложение было написано на net7.0 и компилировал его под ubuntu вот такой командой: dotnet build MainApp.csproj...

Как установить компоненты Net8 не используя инсталляшку Oracle
Привет всем, значит ситупация такая: Есть БД Ora8i и много клиентов к ней. Для того, чтобы клиент получил доступ к БД на его машине...

Преобразовать .NET8 InLine Arrays (Встроенный массив) в Array или List
Пример кода (взял с сайта)... var array = new MyArray(); array = 2; foreach (var item in array) { Console.WriteLine(item);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Опции темы

Новые блоги и статьи
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru