Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
8 / 7 / 1
Регистрация: 19.12.2020
Сообщений: 51

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

25.04.2024, 11:39. Показов 1655. Ответов 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
3312 / 2199 / 387
Регистрация: 14.08.2018
Сообщений: 7,400
Записей в блоге: 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
3312 / 2199 / 387
Регистрация: 14.08.2018
Сообщений: 7,400
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru