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

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

25.04.2024, 11:39. Показов 1823. Ответов 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
3377 / 2263 / 388
Регистрация: 14.08.2018
Сообщений: 7,673
Записей в блоге: 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
3377 / 2263 / 388
Регистрация: 14.08.2018
Сообщений: 7,673
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru