powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / join в запросе к типизированному DataSet
5 сообщений из 5, страница 1 из 1
join в запросе к типизированному DataSet
    #36559339
serverokAsservelat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Всех с наступающими праздниками!

Подскажите, возможно ли использовать оператор JOIN в запросе на фильтрацию записей в некоторой таблице некоторого датасета?

Ситуация:
Имеется типизированный (хотя это не важно) DataSet с несколькими таблицами. Среди прочих есть таблицы Books и Authors. Books имеет поля isbn, title, publiser, authorId. Таблица Authors имеет поля id, fullName.

Таким образом, эти две таблицы и представляют законченную книгу с информацией о номере книги, названии, издателе и имени автора.

Необходимо сформировать запрос на получение всех книг, удовлетворяющих некоторому критерию поиска.

Если бы вся информация о книге содержалась бы в одной таблице, то просто использовал строку фильтра в методе Books.Select():
Код: plaintext
1.
filter += string.Format(" And [{0}] Like '% {1} + %'", kolumnName, serchedValue);
DataRow[] searchedRow = librury_ds.Books.Select("filter");
Но, в моем случае, книга разбита на две таблицы.
Поэтому, получив поля из таблицы Book, я в цикле пробегаю по searchedRow и вытягиваю внешние ключи для выполнения дополнительного запроса к таблице Author для извлечения поля fullName:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DataRow[] searchedRow = librury_ds.Books.Select("filter");

            if (searchedRow == null || searchedRow.Length == 0)
                return null;
            
            //перебираем все найденные записи
            foreach (BookLibruryDataSet.BooksRow bookRow in searchedRow)
            {
                //находим автора 
                DataRow[] itemRows = librury_ds.Authors.Select("ID = " + bookRow.authorID);
                if (itemRows != null && itemRows.Length != 0)
                {
                      //вытягиваем поле fullName
                      BookLibruryDataSet.ItemsRow itemRow = (BookLibruryDataSet.ItemsRow)itemRows[0];
                      someVariable = itemRow.Name;
                }

Получается, что вручную ищу по всем родительским таблицам недостающую информацию для книг.
От сюда вопрос - возможно ли в строке фильтира использовать оператор JOIN для единовременного формирования полной информации о книге?

Простите за столь долгое пояснение ситуации.
...
Рейтинг: 0 / 0
join в запросе к типизированному DataSet
    #36568623
serverokAsservelat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
SELECT     Books.*
FROM         Authors INNER JOIN
                      Books ON Authors.ID = Books.AuthorID INNER JOIN
                      Items ON Books.ItemID = Items.ID
WHERE     (Items.Name LIKE '%абракадабра%')

это SQL-запрос на выбор всех строк из таблицы Books с подтягиванием таблиц Items и Authors.
Напомню, что информация о книге содержится по частям в каждой из трех таблиц.

Существует типизированній датасет для данной БД.
Методом Select() и строкой фильтрации я вытягиваю данные из каждой таблицы в отдельности.
То есть указывать фильтруемые поля в селекте могу через оператор And. Но как написать в одном запросе выборку сразу из всех дататейблов?

То есть, возможно ли использовать оператор Join? И если да, то как?

Облазил инет, а похожего не встречал.
...
Рейтинг: 0 / 0
join в запросе к типизированному DataSet
    #36569027
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если охота тянуть все данные на клиента а потом писать запросы к датасету - используйте linq, но лучше (имхо) сформировать нужный набор скулем. а саму задачу я не понял.
...
Рейтинг: 0 / 0
join в запросе к типизированному DataSet
    #36569122
serverokAsservelat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно, что весь тяжеловес должен на скул ложиться.

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

Вопрос как используя метод Select() для ДатаТейбла сразу получать список ПОЛНОСТЬЮ сформированных записей книг. Ведь запись о книге размещена в 3-х таблицах, а не одной.

А достать хочется всю книгу(книги) одним запросом к дататейблу в Select, а не искать три раза в каждой таблице.

В скуле используется для этого оператор Join, а возможно ли его использовать в методе Select?
Ну может не Join, а что-то другое, но что и как?
...
Рейтинг: 0 / 0
join в запросе к типизированному DataSet
    #36569529
winsky!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у вас какое-то ограничение, использовать только метод Select и только у DataTable?
зы: непонятный термин "резко"
это как?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / join в запросе к типизированному DataSet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]