Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
.NET 6

Объединение двух представлений с нулевыми значениями

06.12.2023, 15:10. Показов 1072. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Имеется две таблицы в базе данных SQLite. Для них созданы представления, в которых поля приведены к одинаковым названиям, а не совпадающие поля приравнены к null.
SQL
1
2
3
4
5
SELECT 
       table1.code AS code,
table1.name AS name,
       NULL AS secname       
  FROM table1
SQL
1
2
3
4
5
SELECT 
       table2.code AS code,
table2.name AS name,
       table2.secname AS secname       
  FROM table1
В редакторе SQL запроса SQLite объединение этих представлений работает
SQL
1
SELECT * FROM get_table1 UNION SELECT * FROM get_table2
В приложении делаю объединение этих представлений
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
gridControl.DataSource = db.get_table1.
Select(e => new
{
    e.code,
    e.name,
e.secname
}).
Union(db.get_table2.
Select(e => new
{
    e.code,
    e.name,
e.secname
})).
ToList();
Но выдает ошибку на поле с null. Как это исправить?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.12.2023, 15:10
Ответы с готовыми решениями:

Создать массив 8x8 с нулевыми значениями и заполнить её в шахматном порядке значениями 1
2. Создать массив 8x8 с нулевыми значениями и заполнить её в шахматном порядке значениями 1.

Объединение представлений
В одном и том же методе данные DataTable посылаются через ViewBag в одну вьюху, и через return View("...") в другую В каждой...

Строки с нулевыми значениями
Всем привет, подскажите плз, как в запросе на выборку отобразить нулевые значения в основной таблице? Запрос берет значения из основной...

9
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
06.12.2023, 16:37
Цитата Сообщение от 1inkin1 Посмотреть сообщение
Но выдает ошибку на поле с null.
Какую ошибку?
0
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
06.12.2023, 16:50  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Какую ошибку?
Code
1
System.InvalidOperationException: "The data is NULL at ordinal 0. This method can't be called on NULL values. Check using IsDBNull before calling."
если поле NULL AS secname не загружать, то объединение работает
0
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
06.12.2023, 17:02
1inkin1, Не знаю как в EF, но в классике это проверяется просто
C#
1
2
WorkType = sqlDataReader["WorkType"]
    == DBNull.Value ? string.Empty : (string)sqlDataReader["WorkType"]
Подозреваю что для EF в классе достаточно объявить свойство в поддержкой null. Строки и так должны его принимать, а вот числовые значения должны иметь тип типа этого
C#
1
public int? MyInt { get; set; }
Добавлено через 2 минуты
1inkin1, Проверка числовых типов в ADO .NET
C#
1
2
BranchID = sqlDataReader["ID_Branch"]
    == DBNull.Value ? null : (int?)sqlDataReader["ID_Branch"]
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18304 / 14228 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
06.12.2023, 17:44
Лучший ответ Сообщение было отмечено 1inkin1 как решение

Решение

1inkin1, а если так первый Select записать?
C#
2
3
4
5
6
7
Select(e => new
{
    e.code,
    e.name,
    secname = (string?)null
}).
1
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
07.12.2023, 05:59
Цитата Сообщение от 1inkin1 Посмотреть сообщение
Для них созданы представления, в которых поля приведены к одинаковым названиям, а не совпадающие поля приравнены к null.
А зачем? В самом EF нельзя такое сделать во время юнион-запроса? Вопрос риторический)
0
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
07.12.2023, 08:19  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Подозреваю что для EF в классе достаточно объявить свойство в поддержкой null.
это у меня изначально было сделано. но, как я понимаю, EF ожидает получить DBNull, а получает просто Null.
Цитата Сообщение от OwenGlendower Посмотреть сообщение
а если так первый Select записать?
Да, так заработало! благодарю
Цитата Сообщение от Usaga Посмотреть сообщение
А зачем?
я упростил пример представлений, чтобы обозначить проблему, но там выборка большая с расчётами и присоединением данных из других таблиц
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,435
07.12.2023, 08:29
Цитата Сообщение от 1inkin1 Посмотреть сообщение
я упростил пример представлений, чтобы обозначить проблему, но там выборка большая с расчётами и присоединением данных из других таблиц
Это всё можно сделать на EF'е, если не упирается в какие-то особенности, которые в EF не поддерживаются. Очень хорошая практика перекладывать на код (на ORM) как можно больше всего. Чтобы не было ни нашим ни вашим. Вроде мощная ORM есть, а вроде бы всё равно вьюхи приходится пилить, которые потом поддерживать ещё надо отдельно.
1
 Аватар для Andrey-MSK
3360 / 2246 / 388
Регистрация: 14.08.2018
Сообщений: 7,588
Записей в блоге: 4
07.12.2023, 08:31
Цитата Сообщение от 1inkin1 Посмотреть сообщение
но, как я понимаю, EF ожидает получить DBNull, а получает просто Null.
Как он может получить просто null, если по запросу он получает DbNull? Нужно преобразовать данные DbNull в null для C#.
Цитата Сообщение от 1inkin1 Посмотреть сообщение
Check using IsDBNull before calling.
И вам пишут что сделать.
0
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
07.12.2023, 10:46  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Это всё можно сделать на EF'е, если не упирается в какие-то особенности, которые в EF не поддерживаются. Очень хорошая практика перекладывать на код (на ORM) как можно больше всего. Чтобы не было ни нашим ни вашим. Вроде мощная ORM есть, а вроде бы всё равно вьюхи приходится пилить, которые потом поддерживать ещё надо отдельно.
Делаю по привычке. Попробую на досуге разобраться, как это делается в коде
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2023, 10:46
Помогаю со студенческими работами здесь

Массив с нулевыми значениями
Присваивание нулевых начальных значений элементам массива.. Пожалуйста помогите исправить ошибки......не переделывая...это пример из...

Поиск столбцов с нулевыми значениями
есть задачка на с++,помогите переделать под мпи,буду благодарна задачка на поиск столбцов с нулевыми значениями #include...

Скрытие строк в таблице с нулевыми значениями
Информации о срытии строк много, но нужной мне, к сожалению, не нашла, помогите пожалуйста со следующей проблемой или направьте туда, где...

Процедуры (вывести столбцы м-цы с нулевыми значениями)
Следующая задача: Сформировать и вывести на экран две матрицы путем ввода элементов с клавиатуры и по заданному правилу, используя...

Найти строки матрицы с нулевыми значениями
Помогите написать программу для решения задачи. Для массива из 2 столбцов и 10 строк напечатать номер каждой строки, оба элемента...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru