Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
 Аватар для Elektrik72
51 / 15 / 7
Регистрация: 09.02.2014
Сообщений: 209

SELECT в PostgreSQL: Can't cast database type record to Int32

16.07.2022, 17:51. Показов 5469. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Почему такой запрос не работает -

C#
1
2
3
4
5
6
 public string Request()
        {
            string request = $"SELECT (worker_id, first_name, last_name, workers.department_id) " +
                $"FROM workers ";
            return request;
        }
А так работает.
C#
1
2
3
4
5
 public string Request()
        {
            string request = $"SELECT * FROM workers ";
            return request;
        }
Всего в workers 4 поля.
Наверное вот здесь нужно как то по другому записать, но не получилось найти примера.
C#
1
SELECT (worker_id, first_name, last_name, workers.department_id)
Везде запросы либо - *, либо по одному полю запрос.
Так передаю сам запрос и обрабатываю его.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  void Select_All()
            {
                if(request.GetType() == new Select_All().GetType())
                {
                List<Worker> list = new List<Worker>();
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
 
                            Console.WriteLine("{0} {1} {2} {3} ", reader.GetInt32(0), reader.GetString(1),
                           reader.GetString(2), reader.GetInt32(4));
 
                            //worker.Worker_id = reader.GetInt32(0);
                            //worker.First_Name = reader.GetString(1);
                            //worker.Last_Name = reader.GetString(2);
                            //worker.Depatment_id = reader.GetInt32(3);
                            //worker.Depatment_parent_id = reader.GetInt32(4);
                            //worker.Salary = reader.GetInt32(4);
                            //worker.Type_Worker = reader.GetString(5);
                            //list.Add(worker);
                        }
                }
Добавлено через 6 минут
Под не работает я имею ввиду об ошибке - System.InvalidCastException: "Can't cast database type record to Int32"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.07.2022, 17:51
Ответы с готовыми решениями:

Unable to cast object of type 'System.Int32' to type 'System.String' при выводе текстового свойства модели
Здравствуйте. При попытке вывести имя модели юзера именно с типом string вью, кидает упомянутое исключение. Если тип изменить на int. то...

Метод Graphics.DrawLine(Int32, Int32, Int32, Int32) Узнать координаты всех точек данной прямой
Как я могу получить координаты всех точек, создаваемых данных методом? Мне необходимо это в дальнейшем чтобы посчитать количество...

SQLite DataBase - почему подчеркивает DataBase db: пишет (DataBase cannot be resolved to a type)
Здравствуйте! помогите понять почему подчеркивает DataBase db; пишет (DataBase cannot be resolved to a type), чем это можно исправить ...

51
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
18.07.2022, 14:02
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dr9vik Посмотреть сообщение
и я ему предлагаю упростить себе жизнь
вы ему предлагает с низа начать, я сверху
вот и вся разница
Ну сделайте мне вот такой запрос сверху... Он за 1 секунду обрабатывает около 170000 записей и выдаёт в результате ~5000 записей, справится ваш EF с таким и как вообще вы его сообразите на LINQ... А с ADO вообще проблем нет - VIEW в БД, а на клиенте класс результирующего набора из 13 свойств, SqlCommand и готово...
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
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
;WITH 
ProgONZ_CTE (ID_Draw, List, Naimenovanie, WeightONZ)
AS
(
    SELECT
        po.ID_Draw, po.List, po.Naimenovanie, SUM(ISNULL(po.Obiem, 0)) AS WeightONZ
    FROM
        dbo.tblProgressONZ po
    GROUP BY
        po.ID_Draw, po.List, po.Naimenovanie
)
,
 
UnitLaborE_CTE (ID_Draw, List, PPDiametr, TrMont, TrKoeff)
AS
(
    SELECT
        d.ID_Draw, ds.List, pp.PPDiametr, pp.TrMont, pp.TrKoeff
    FROM
        dbo.tblDraw d INNER JOIN
        dbo.tblDrawSys ds ON ds.ID_Draw = d.ID_Draw INNER JOIN
        dbo.tblDrawSpec s ON s.ID_DrawSys = ds.ID_DrawSys INNER JOIN
        dbo.tblPPData pp ON pp.ID_DrawSpec = s.ID_DrawSpec
    WHERE
        pp.PPDiametr IS NOT NULL AND d.Works = N'ТМО'
    GROUP BY
        d.ID_Draw, ds.List, pp.PPDiametr, pp.TrMont, pp.TrKoeff
)
,
 
UnitLaborA_CTE (ID_Draw, List, PPDiametr, TrMont, TrKoeff)
AS
(
    SELECT
        d.ID_Draw, ds.List, pp.PPDiametr +  N' изготовление' AS PPDiametr, pp.TrIzg, pp.TrKoeffIzg
    FROM
        dbo.tblDraw d INNER JOIN
        dbo.tblDrawSys ds ON ds.ID_Draw = d.ID_Draw INNER JOIN
        dbo.tblDrawSpec s ON s.ID_DrawSys = ds.ID_DrawSys INNER JOIN
        dbo.tblPPData pp ON pp.ID_DrawSpec = s.ID_DrawSpec
    WHERE
        pp.PPDiametr IS NOT NULL AND pp.TrIzg IS NOT NULL AND d.Works = N'ТМО'
    GROUP BY
        d.ID_Draw, ds.List, pp.PPDiametr, pp.TrIzg, pp.TrKoeffIzg
)
,
 
Total_CTE (ID_Draw, List, PPDiametr, [Weight], LaborTotal)
AS
(
    SELECT
        d.ID_Draw, ds.List, p.PPDiametr,
        CASE WHEN d.ByUnit = 0 
        THEN
            SUM(s.Kolvo * s.VesEd) / 1000
        ELSE
            SUM(s.Kolvo)
        END AS [Weight],
        CASE WHEN d.ByUnit = 0
        THEN            
            SUM(((s.Kolvo * s.VesEd) / 1000) * p.TrMont * p.TrKoeff) 
        ELSE
            SUM(s.Kolvo * p.TrMont * p.TrKoeff) 
        END AS LaborTotal
    FROM
        dbo.tblDraw d INNER JOIN
        dbo.tblDrawSys ds ON d.ID_Draw = ds.ID_Draw INNER JOIN
        dbo.tblDrawSpec s ON ds.ID_DrawSys = s.ID_DrawSys INNER JOIN
        dbo.tblPPData p ON s.ID_DrawSpec = p.ID_DrawSpec
    WHERE
        p.PPDiametr IS NOT NULL AND d.Works = N'ТМО'
    GROUP BY
        d.ID_Draw, ds.List, p.PPDiametr, d.ByUnit
)
,
 
Erected_CTE (ID_Draw, List, PPDiametr, WeightErected, LaborErected, TrMont, TrKoeff)
AS
(
    SELECT
        d.ID_Draw, ds.List, pp.PPDiametr, 
        CASE WHEN d.ByUnit = 0
        THEN
            SUM(ISNULL(pd.PDFact, 0) * s.VesEd) / 1000
        ELSE
            SUM(ISNULL(pd.PDFact, 0))
        END AS WeightErected,
        CASE WHEN d.ByUnit = 0
        THEN
            SUM((ISNULL(pd.PDFact, 0) * s.VesEd) / 1000) * pp.TrMont * pp.TrKoeff
        ELSE
            SUM(ISNULL(pd.PDFact, 0) * pp.TrMont * pp.TrKoeff) 
        END AS LaborErected,
        pp.TrMont, pp.TrKoeff
    FROM
        dbo.tblDraw d INNER JOIN
        dbo.tblDrawSys ds ON ds.ID_Draw = d.ID_Draw INNER JOIN
        dbo.tblDrawSpec s ON s.ID_DrawSys = ds.ID_DrawSys INNER JOIN
        dbo.tblPPData pp on s.ID_DrawSpec = pp.ID_DrawSpec INNER JOIN    
        dbo.tblProgressData pd ON s.ID_DrawSpec = pd.ID_DrawSpec
    WHERE 
        d.Works = N'ТМО'
    GROUP BY
        d.ID_Draw, ds.List, pp.PPDiametr, pp.TrMont, pp.TrKoeff, d.ByUnit
)
,
 
TotalAssembly_CTE (ID_Draw, List, PPDiametr, [Weight], LaborTotal)
AS
(
    SELECT
        d.ID_Draw, ds.List, p.PPDiametr + N' изготовление' AS PPDiametr,
        SUM(s.KolvoIzg * s.VesEd) / 1000 AS [Weight],
        SUM(((s.KolvoIzg * s.VesEd) / 1000) * p.TrIzg * p.TrKoeffIzg) AS LaborTotal
    FROM
        dbo.tblDraw d INNER JOIN
        dbo.tblDrawSys ds ON d.ID_Draw = ds.ID_Draw INNER JOIN
        dbo.tblDrawSpec s ON ds.ID_DrawSys = s.ID_DrawSys INNER JOIN
        dbo.tblPPData p ON s.ID_DrawSpec = p.ID_DrawSpec  
    WHERE
        p.TrIzg IS NOT NULL AND d.Works = N'ТМО'
    GROUP BY
        d.ID_Draw, ds.List, p.PPDiametr + N' изготовление'
)
,
 
ErectedAssembly_CTE (ID_Draw, List, PPDiametr, WeightErected, LaborErected, TrMont, TrKoeff)
AS
(
    SELECT
        d.ID_Draw, ds.List, pp.PPDiametr + N' изготовление' AS PPDiametr, 
        SUM(ISNULL(pd.PDFactIzg, 0) * s.VesEd) / 1000 AS WeightErected,
        SUM((ISNULL(pd.PDFactIzg, 0) * s.VesEd) / 1000) * pp.TrIzg * pp.TrKoeffIzg AS LaborErected,
        pp.TrIzg, pp.TrKoeffIzg
    FROM
        dbo.tblDraw d INNER JOIN
        dbo.tblDrawSys ds ON ds.ID_Draw = d.ID_Draw INNER JOIN
        dbo.tblDrawSpec s ON s.ID_DrawSys = ds.ID_DrawSys INNER JOIN
        dbo.tblPPData pp on s.ID_DrawSpec = pp.ID_DrawSpec INNER JOIN    
        dbo.tblProgressData pd ON s.ID_DrawSpec = pd.ID_DrawSpec
    WHERE
        pp.TrIzg IS NOT NULL AND d.Works = N'ТМО'
    GROUP BY
        d.ID_Draw, ds.List, pp.PPDiametr, pp.TrIzg, pp.TrKoeffIzg
)
 
SELECT
    t.ID_Draw, t.List, t.PPDiametr, ISNULL(le.TrMont, 0) AS TrMont, le.TrKoeff, ISNULL(t.[Weight], 0) AS [Weight], ISNULL(t.LaborTotal, 0) AS LaborTotal, 
    ISNULL(e.WeightErected, 0) AS WeightErected, ISNULL(e.LaborErected, 0) AS LaborErected, ISNULL(po.WeightONZ, 0) AS WeightONZ, 
    ISNULL(po.WeightONZ, 0) * ISNULL(e.TrMont, 0) * ISNULL(e.TrKoeff, 0) AS LaborONZ, 
    ISNULL(t.[Weight], 0) - ISNULL(po.WeightONZ, 0) AS WeightONZRemain,
    ISNULL(t.LaborTotal, 0) - (ISNULL(po.WeightONZ, 0) * ISNULL(e.TrMont, 0) * ISNULL(e.TrKoeff, 0)) AS LaborONZRemain
FROM
    Total_CTE t LEFT JOIN
    UnitLaborE_CTE le ON t.ID_Draw = le.ID_Draw AND t.List = le.List AND t.PPDiametr = le.PPDiametr LEFT JOIN
    Erected_CTE e ON t.ID_Draw = e.ID_Draw AND t.List = e.List AND t.PPDiametr = e.PPDiametr LEFT JOIN
    ProgONZ_CTE po ON t.ID_Draw = po.ID_Draw AND t.List = po.List AND t.PPDiametr = po.Naimenovanie
 
UNION
 
SELECT
    t.ID_Draw, t.List, t.PPDiametr, ISNULL(le.TrMont, 0) AS TrMont, le.TrKoeff, ISNULL(t.[Weight], 0) AS [Weight], ISNULL(t.LaborTotal, 0) AS LaborTotal, 
    ISNULL(e.WeightErected, 0) AS WeightErected, ISNULL(e.LaborErected, 0) AS LaborErected, ISNULL(po.WeightONZ, 0) AS WeightONZ, 
    ISNULL(po.WeightONZ, 0) * ISNULL(e.TrMont, 0) * ISNULL(e.TrKoeff, 0) AS LaborONZ, 
    ISNULL(t.[Weight], 0) - ISNULL(po.WeightONZ, 0) AS WeightONZRemain,
    ISNULL(t.LaborTotal, 0) - (ISNULL(po.WeightONZ, 0) * ISNULL(e.TrMont, 0) * ISNULL(e.TrKoeff, 0)) AS LaborONZRemain
FROM
    TotalAssembly_CTE t LEFT JOIN 
    UnitLaborA_CTE le ON t.ID_Draw = le.ID_Draw AND t.List = le.List AND t.PPDiametr = le.PPDiametr LEFT JOIN
    ErectedAssembly_CTE e ON t.ID_Draw = e.ID_Draw AND t.List = e.List AND t.PPDiametr = e.PPDiametr LEFT JOIN
    ProgONZ_CTE po ON t.ID_Draw = po.ID_Draw AND t.List = po.List AND t.PPDiametr = po.Naimenovanie
0
Эксперт .NET
 Аватар для Usaga
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,057
18.07.2022, 14:31
Andrey-MSK, на самом деле на Linq2Db такое можно реализовать. Другое дело, что для этого скилуха нужна высокая)
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
18.07.2022, 14:32
Цитата Сообщение от Usaga Посмотреть сообщение
В случае с игрушечными проектами - да. В более сложных случаях - сильно нет.
Цитата Сообщение от Dr9vik Посмотреть сообщение
а у вас я вижу как всегда, автор уже типа интерпрайз решение пишет, поэтому низя!!!!
изучай!!!
ай ай
не нужно усложнять
пока вижу вы пытаетесь оптимизировать...корень всех проблем
Цитата Сообщение от Usaga Посмотреть сообщение
А я вроде как про то, что на разных СУБД из одного LINQ может порождаться разные SQL. И даже, если он будет один-в-одни, поведение и производительность могут отличаться. Поэтому довод о волшебной совместимости запросов - он очень условный.
пока вижу пальцем в небо
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
18.07.2022, 14:36
Цитата Сообщение от Usaga Посмотреть сообщение
Другое дело, что для этого скилуха нужна высокая)
Я вот даже не представляю как такое можно на LINQ написать
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
18.07.2022, 14:42
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Я вот даже не представляю как такое можно на LINQ написать
а зачем такое писать в linq?
0
Эксперт .NET
 Аватар для Usaga
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,057
18.07.2022, 14:43
Andrey-MSK, у Linq2Db набор методов значительно шире, чем у EF и намеого более низкоуровневый. Там и CTE и временные таблицы и черта лысого только нет.
1
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
18.07.2022, 14:59
Цитата Сообщение от Dr9vik Посмотреть сообщение
а зачем такое писать в linq?
Ну вы же топите за EF, что там всё просто и ни строчки SQL писать не надо, вот я вам и предложил задачку. И таких запросов в настоящей БД, а не в ваших поделках с миграциями, вагон и маленькая тележка...
0
Эксперт .NET
 Аватар для Usaga
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,057
18.07.2022, 15:31
Цитата Сообщение от Dr9vik Посмотреть сообщение
не нужно усложнять
пока вижу вы пытаетесь оптимизировать...корень всех проблем
Я не усложняю. У меня за плечами опыт работы над проектом, где всё было "упрощено". Упрощено настолько, что уже кастомеры стали жаловаться. На тормоза и на выжирание всех квот в Azure. После чего выяснилось, что с ORM работать надо совсем иначе. О чём я тут и толкую. EF не волшебная палочка.

Цитата Сообщение от Dr9vik Посмотреть сообщение
пока вижу пальцем в небо
Да. Оттуда и уверенность в том, что новичкам надо начинать с EF. Отсутствие реального опыта делает всё сильно проще, правда?)

Цитата Сообщение от Dr9vik Посмотреть сообщение
а зачем такое писать в linq?
А бизнес будет спрашивать на чём нам это писать? Стоит задача написать. Значит надо написать. Если инструмент этого не позволяет, то что тогда? Послать на фиг задачу такую?
1
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
18.07.2022, 16:15
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Ну вы же топите за EF, что там всё просто и ни строчки SQL писать не надо, вот я вам и предложил задачку. И таких запросов в настоящей БД, а не в ваших поделках с миграциями, вагон и маленькая тележка...
ну делайте все на ADO.NET
а новички пусть еф изучают
Цитата Сообщение от Usaga Посмотреть сообщение
EF не волшебная палочка.
только она в начале все упрощает
Цитата Сообщение от Usaga Посмотреть сообщение
Упрощено настолько, что уже кастомеры стали жаловаться. На тормоза и на выжирание всех квот в Azure.
а это называется оптимизация
пришли ж в проект когда жалобы посыпались...
0
Эксперт .NET
 Аватар для Usaga
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,057
18.07.2022, 16:27
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Я вот даже не представляю как такое можно на LINQ написать
Интереса ради попробовал часть запроса воспроизвети. На ура получилось. Это грубое приближение, конечно, но сама идея должна быть понятна)

Модель:
Кликните здесь для просмотра всего текста

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
    public class tblProgressONZ
    {
        public int ID_Draw { get; set; }
        public int List { get; set; }
        public string Naimenovanie { get; set; }
        public int Obiem { get; set; }
    }
 
    public class tblDraw
    {
        public int ID_Draw { get; set; }
 
        [Association(ThisKey = nameof(ID_Draw), OtherKey = nameof(ID_Draw), CanBeNull = false)]
        public tblDrawSys tblDrawSys { get; set; }
 
        public int ByUnit { get; set; }
    }
    
    public class tblDrawSys
    {
        public int ID_Draw { get; set; }
        public int ByUnit { get; set; }
        public int List { get; set; }
 
        public int ID_DrawSys { get; set; }
 
        [Association(ThisKey = nameof(ID_DrawSys), OtherKey = nameof(ID_DrawSys), CanBeNull = false)]
        public tblDrawSpec tblDrawSpec { get; set; }
    }
 
    public class tblDrawSpec
    {
        public int ID_DrawSys { get; set; }
        public int ID_DrawSpec { get; set; }
        public int Kolvo { get; set; }
        public int VesEd { get; set; }
 
        [Association(ThisKey = nameof(ID_DrawSpec), OtherKey = nameof(ID_DrawSpec), CanBeNull = false)]
        public tblPPData tblPPData { get; set; }
    }
 
    public class tblPPData
    {
        public int ID_DrawSpec { get; set; }
        public int TrMont { get; set; }
        public int TrKoeff { get; set; }
        public int PPDiametr { get; set; }
    }


LINQ-запрос:
Кликните здесь для просмотра всего текста

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
            using var ctx = new L2DbContext();
 
            var ProgONZ_CTE = ctx.GetTable<tblProgressONZ>()
                .GroupBy(x => new { x.ID_Draw, x.List, x.Naimenovanie })
                .Select(x => new
                {
                    x.Key.ID_Draw,
                    x.Key.List,
                    x.Key.Naimenovanie,
                    WeightONZ = x.Sum(y => Sql.Ext.SqlServer().IsNull(y.Obiem, 0))
                })
                .AsCte("ProgONZ_CTE");
 
            var Total_CTE = ctx.GetTable<tblDraw>()
                .GroupBy(x => new { x.ID_Draw, x.tblDrawSys.List, x.tblDrawSys.tblDrawSpec.tblPPData.PPDiametr, x.ByUnit })
                .Select(x => new
                {
                    x.Key.ID_Draw,
                    x.Key.List,
                    x.Key.PPDiametr,
                    Weight = Sql.AsSql(x.Key.ByUnit == 0
                        ? x.Sum(y => y.tblDrawSys.tblDrawSpec.Kolvo * y.tblDrawSys.tblDrawSpec.VesEd) / 1000
                        : x.Sum(y => y.tblDrawSys.tblDrawSpec.Kolvo)),
                    LaborTotal = Sql.AsSql(x.Key.ByUnit == 0
                        ? x.Sum(y => ((y.tblDrawSys.tblDrawSpec.Kolvo * y.tblDrawSys.tblDrawSpec.VesEd) / 1000) * y.tblDrawSys.tblDrawSpec.tblPPData.TrMont * y.tblDrawSys.tblDrawSpec.tblPPData.TrKoeff)
                        : x.Sum(y => y.tblDrawSys.tblDrawSpec.Kolvo * y.tblDrawSys.tblDrawSpec.tblPPData.TrMont * y.tblDrawSys.tblDrawSpec.tblPPData.TrKoeff))
                })
                .AsCte("Total_CTE");
 
            var r = ProgONZ_CTE.LeftJoin(
                Total_CTE,
                (a, b) => a.ID_Draw == b.ID_Draw && a.List == b.List,
                (a, b) => new
                {
                    a.Naimenovanie,
                    b.ID_Draw,
                    b.List,
                    b.Weight,
                    b.LaborTotal
                })
                .ToList();
 
            Console.WriteLine(r);


И SQL полученный:
Кликните здесь для просмотра всего текста

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
BeforeExecute
--  SqlServer.2012
 
WITH [ProgONZ_CTE] ([ID_Draw],[List], [Naimenovanie])
AS
(
        SELECT
                [t1].[ID_Draw],
                [t1].[List],
                [t1].[Naimenovanie]
        FROM
                [tblProgressONZ] [t1]
        GROUP BY
                [t1].[ID_Draw],
                [t1].[List],
                [t1].[Naimenovanie]
),
[Total_CTE]
(
        [ID_Draw],[List],
        [Weight],
        [LaborTotal]
)
AS
(
        SELECT
                [t2].[ID_Draw],
                [a_tblDrawSys].[List],
                IIF([t2].[ByUnit] = 0, Sum([a_tblDrawSpec].[Kolvo] * [a_tblDrawSpec].[VesEd]) / 1000, Sum([a_tblDrawSpec].[Kolvo])),
                IIF([t2].[ByUnit] = 0, Sum(((([a_tblDrawSpec].[Kolvo] * [a_tblDrawSpec].[VesEd]) / 1000) * [a_tblPPData].[TrMont]) * [a_tblPPData].[TrKoeff]), Sum(([a_tblDrawSpec].[Kolvo] * [a_tblPPData].[TrMont]) * [a_tblPPData].[TrKoeff]))
        FROM
                [tblDraw] [t2]
                        INNER JOIN [tblDrawSys] [a_tblDrawSys]
                                INNER JOIN [tblDrawSpec] [a_tblDrawSpec] ON [a_tblDrawSys].[ID_DrawSys] = [a_tblDrawSpec].[ID_DrawSys]
                        ON [t2].[ID_Draw] = [a_tblDrawSys].[ID_Draw]
                        INNER JOIN [tblPPData] [a_tblPPData] ON [a_tblDrawSpec].[ID_DrawSpec] = [a_tblPPData].[ID_DrawSpec]
        GROUP BY
                [t2].[ID_Draw],
                [a_tblDrawSys].[List],
                [a_tblPPData].[PPDiametr],
                [t2].[ByUnit]
)
SELECT
        [a].[Naimenovanie],
        [b].[ID_Draw],
        [b].[List],
        [b].[Weight],
        [b].[LaborTotal]
FROM
        [ProgONZ_CTE] [a]
                LEFT JOIN [Total_CTE] [b] ON [a].[ID_Draw] = [b].[ID_Draw] AND [a].[List] = [b].[List]


Т.е. вполне реализуемо)
1
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
18.07.2022, 16:34
Цитата Сообщение от Dr9vik Посмотреть сообщение
а новички пусть еф изучают
Новички пусть ADO + SQL изучают, всё должно идти по нарастающей. В любом учебнике по C# вначале рассказывают про ADO, а потом уже про EF - задумайтесь...
EF - это надстройка над ADO и SQL, и если не знать как работает ADO + SQL, то ничего хорошего из применения EF не выйдет. Вам уже вторую страницу это пытаются сказать, но вы всё никак не хотите этого понять...

Добавлено через 5 минут
Цитата Сообщение от Usaga Посмотреть сообщение
Code
1
2
BeforeExecute
-- SqlServer.2012
Похоже Но на моём наверно не взлетит, у меня MS SQL Server 2008 R2, хотя может IIF в CASE преобразует
Но LINQ канешн жесть
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
18.07.2022, 16:44
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
В любом учебнике по C# вначале рассказывают про ADO
если только учебник про ado net, вот там точно расскажут...
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
задумайтесь
задумался, где мне такое прочитать
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
если не знать как работает ADO + SQL, то ничего хорошего из применения EF не выйдет
ок, путь страдания
0
Эксперт .NET
 Аватар для Usaga
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,057
18.07.2022, 17:42
Цитата Сообщение от Dr9vik Посмотреть сообщение
только она в начале все упрощает
Что она упрощает-то? И за счёт чего?

Цитата Сообщение от Dr9vik Посмотреть сообщение
а это называется оптимизация
пришли ж в проект когда жалобы посыпались...
Это называется совсем по другому) Не "оптимизации", а "научить правильно пользоваться".

Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Но LINQ канешн жесть
Да. Сложноват получается. Не поспоришь.
0
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
18.07.2022, 18:42
едрит какие вы душные
вместо того что бы сидеть разбираться с C#, вы душните что бы еще надо сидеть и изучать SQL
тс сделает сайт за пару вечеров и будет рад, а если надо разберется почему там запрос долго делается

а с учетом того что тема была про мапинг, то как минимум отдать все на откуп даперу
0
Эксперт .NET
 Аватар для Usaga
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,057
19.07.2022, 03:00
Душните...
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
19.07.2022, 08:27
Цитата Сообщение от Dr9vik Посмотреть сообщение
сделает сайт за пару вечеров и будет рад
И вот потом рождаются проекты из серии тяп-ляп и в продакшн... А чуть не стандартная ситуация, и всё, капец проекту...
0
 Аватар для Elektrik72
51 / 15 / 7
Регистрация: 09.02.2014
Сообщений: 209
19.07.2022, 11:42  [ТС]
Я тоже считаю что при работе с бд, запросы нужно изучить в первую очередь т.к. это фундаментал, LINQ и ORM изучить придется но чуть попозже. Поэтому делал перерыв в С# на три недели - изучал SQL запросы работая с базой northwind (наверное все проходили через эту базу) и сейчас хочу закрепить опыт, на этом задании.

HF, а можно пожалуйста поподробнее что вы имеете в виду под проверкой запросов в IDE?
Это создание Unit тестов в вижуал студио или что это?
1
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
19.07.2022, 12:13
Цитата Сообщение от Elektrik72 Посмотреть сообщение
а можно пожалуйста поподробнее что вы имеете в виду под проверкой запросов в IDE?
Наверное имеется ввиду проверка в SSMS на самом сервере, а потом уже перенос работающего запроса в код C#.

Добавлено через 3 минуты
Цитата Сообщение от Elektrik72 Посмотреть сообщение
SELECT в PostgreSQL
Цитата Сообщение от Elektrik72 Посмотреть сообщение
изучал SQL запросы работая с базой northwind
На PostgreSQL есть эта БД?
0
Эксперт .NET
 Аватар для Usaga
14789 / 9562 / 1367
Регистрация: 21.01.2016
Сообщений: 36,057
19.07.2022, 13:38
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
На PostgreSQL есть эта БД?
Мне попадалась портированная и на MySQL тоже. Это не от MS, руками добровольцев.
0
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,753
Записей в блоге: 2
19.07.2022, 13:38
Цитата Сообщение от Elektrik72 Посмотреть сообщение
а можно пожалуйста поподробнее что вы имеете в виду под проверкой запросов в IDE?
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Наверное имеется ввиду проверка в SSMS на самом сервере, а потом уже перенос работающего запроса в код C#.
Всё верно сказал Andrey-MSK. Почему бы сначала не проверить что БД возвращает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.07.2022, 13:38

The ViewData item that has the key 'EdLevel1' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>
Возникает такая ошибка. Вроде все правильно, не пойму в чем проблема &lt;div class=&quot;form-group&quot;&gt; ...

Ошибка CDO:Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Outlook.MailItem'
Здаствуйте у меня такая проблема, я получаю сообщения с Outlook'а путем простейших махинаций, когда запускаю цикл для сохранения имени...

Cannot determine embedded database driver class for database type NONE
Подскажите, что делать с этой гадостью. Был рабочий сайт все полностью работало, было даже несколько версий по обновлению. Теперь во...

Could not cast transparent proxy to type
Помогите решить проблему с этим исключением. Сижу ломаю голову и не могу понять. Полный код тут. Использую NetFramework 4.5.2 (Пробовал...

Cast interface to concrete type
Добрый день. Имеется агрегатор событий , у которого &quot;издатели и подписчики&quot; реализуют интерфейс &quot;IApplicationEvent&quot;. Понадобилось...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru