powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как объединить две таблицы?
14 сообщений из 14, страница 1 из 1
Как объединить две таблицы?
    #35373999
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть датасет с двумя таблицами, связанными между собой. Т.е. на одну запись в первой приходится несколько записей во второй.
Есть ли штатное средство объединить эти таблицы в одну?

В МСДНе нашел только DataTable.Merge(). Собираюсь попробовать. Но он, вроде как, не совсем для моей задачи.

Ну и решение "в лоб", естественно, всегда со мной.

Может посоветуете что-нибудь более лаконичное?
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35374178
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinatavrЕсть датасет с двумя таблицами, связанными между собой. Т.е. на одну запись в первой приходится несколько записей во второй.
смысл сего действия?

MinatavrВ МСДНе нашел только DataTable.Merge(). Собираюсь попробовать. Но он, вроде как, не совсем для моей задачи.
а почему нет, поможет.
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35374274
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WYPMAH MinatavrЕсть датасет с двумя таблицами, связанными между собой. Т.е. на одну запись в первой приходится несколько записей во второй.
смысл сего действия? Да вроде, как обычное дело, иметь ссылающиеся друг на друга таблицы. Релятивные базы, кажется, по науке называются.
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35374469
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WYPMAH Minatavr
[quot Minatavr]В МСДНе нашел только DataTable.Merge(). Собираюсь попробовать. Но он, вроде как, не совсем для моей задачи.
а почему нет, поможет.
Вот что пишет МСДН по этому поводу:
авторIf a table has one or more child tables, defined as part of a relationship, each child table must be merged individually.
Значит, этот метод не отслеживает связи между таблицами.
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35374512
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаем еще раз:

MinatavrЕсть датасет с двумя таблицами, связанными между собой. Т.е. на одну запись в первой приходится несколько записей во второй. Есть ли штатное средство объединить эти таблицы в одну?

MinatavrДа вроде, как обычное дело, иметь ссылающиеся друг на друга таблицы. Релятивные базы, кажется, по науке называются.

Во-первых, возможно имелось ввиду реляционные БД.
Во-вторых, если есть в наличии 2 таблицы со связью, то зачем "объединить эти таблицы в одну", в этом и был вопрос. Поэтому до сих пор не понятен тайный смысл сего действия.
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35374547
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага. Теперь дошло, что же непонятно.

1) Имелась в виду реляционная БД. Прошу прощения за неграмотность - новичек я еще в этой сфере.
2) Цель объединения - так стоит задача. А вот объединение именно средствами C# а не SQL сервера для сокращения трафика между клиентом и сервером.
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35374591
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно получить аналог следующего запроса:
Код: plaintext
1.
2.
select * 
from t1 right join t2 on t1.a = t2.a_up
where t1.a= 100 
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35375178
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minatavr2) Цель объединения - так стоит задача. А вот объединение именно средствами C# а не SQL сервера для сокращения трафика между клиентом и сервером.
бред какой-то. Никакого сокращения трафика вы не получите, лишь геморрой на одно место. Зачем это делать в приложении, если для этого существует язык запросов к БД, который, кстати, справляется со всеми мыслимыми "извращениями", так что не забивайте себе голову такими задачами.
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35375709
Фотография Sweet_Alkazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinatavrЕсть датасет с двумя таблицами, связанными между собой. Т.е. на одну запись в первой приходится несколько записей во второй.
Есть ли штатное средство объединить эти таблицы в одну?

В МСДНе нашел только DataTable.Merge(). Собираюсь попробовать. Но он, вроде как, не совсем для моей задачи.

Ну и решение "в лоб", естественно, всегда со мной.

Может посоветуете что-нибудь более лаконичное?

Накидал классец(без инкапсуляции), ничего лаконичнее придумать не смог
Код: plaintext
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.
Public Class SQLJoiner
    Public dtJoin As DataTable
    Public dtA As DataTable
    Public dtB As DataTable
    Public OuterJoin As Boolean = False

    Public Sub JoinSchema()
        Dim col As DataColumn
        Dim new_col As DataColumn
        Dim ds As New DataSet()

        dtJoin = dtA.Clone
        dtJoin.TableName = dtA.TableName & "_" & dtB.TableName
        ds.Tables.Add(dtJoin)
        For Each col In dtB.Columns
            If dtJoin.Columns.Contains(col.ColumnName) Then
                new_col = dtJoin.Columns.Add(col.ColumnName & Guid.NewGuid().ToString())
            Else
                new_col = dtJoin.Columns.Add(col.ColumnName)
            End If

            new_col.AllowDBNull = col.AllowDBNull
            new_col.DataType = col.DataType
            new_col.DefaultValue = col.DefaultValue
            new_col.MaxLength = col.MaxLength
            new_col.ReadOnly = col.ReadOnly
            new_col.Unique = col.Unique
        Next
    End Sub

    Public Sub JoinData(ByVal col_A As String, ByVal col_B As String)
        Dim ds As New DataSet()
        Dim full_row As ArrayList
        Dim rowA As DataRow
        Dim rowB As DataRow

        ds.Tables.Add(dtA)
        ds.Tables.Add(dtB)

        ds.Relations.Add("LOCAL_RELATION", dtA.Columns(col_A), dtB.Columns(col_B))
        For Each rowA In dtA.Rows
            If OuterJoin OrElse (rowA.GetChildRows("LOCAL_RELATION").Length >  0 ) Then
                Dim row_Added As Boolean = False
                For Each rowB In rowA.GetChildRows("LOCAL_RELATION")
                    full_row = New ArrayList(rowA.ItemArray)
                    full_row.AddRange(rowB.ItemArray)
                    dtJoin.LoadDataRow(full_row.ToArray(), True)
                    row_Added = True
                Next
                If Not row_Added AndAlso OuterJoin Then
                    Dim obj(dtB.Columns.Count -  1 ) As Object
                    full_row = New ArrayList(rowA.ItemArray)
                    full_row.AddRange(obj)
                    dtJoin.LoadDataRow(full_row.ToArray(), True)
                End If
            End If
        Next
    End Sub
End Class
Использование
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim joiner As New SQLJoiner()
joiner.dtA = myDtA
joiner.dtB = myDtB
joiner.OuterJoin = True ' Если  OuterJoin = True то моделируем dtA LEFT OUTER JOIN dtB, 
joiner.JoinSchema() 'иначе dtA INNER JOIN dtB
joiner.JoinData(COLUMN_NAME_A, COLUMN_NAME_B)
result = joiner.dtJoin
Тестировал мало..
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35376013
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sweet_Alkazar
и вы действительно думаете, что это будет работать правильнее и, самое главное, быстрее запроса на сервере БД?
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35376082
Фотография Sweet_Alkazar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WYPMAHи вы действительно думаете, что это будет работать правильнее и, самое главное, быстрее запроса на сервере БД?
Современная архитектура приложений очень разнообразна и
если вдруг у автора данные одной таблицы лежат на сервере в Калифорнии, а другой на сервере во Владивостоке, а результаты нужны в Москве и связь по dial-up, то всё может быть)))
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #35376117
Minatavr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sweet_Alkazar , спасибо за готовое решение. Вот только я искал не алгоритм, а какой-нибудь класс, который бы сам все сделал за меня :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как объединить две таблицы?
    #38473041
Нальбий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если одна таблица получена из DBF, а другая с SQL-сервера, тогда очень даже актуальной становится объединение таблиц на клиенте
...
Рейтинг: 0 / 0
Как объединить две таблицы?
    #38473590
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нальбий, 5 лет прошло. Какие на фиг таблицы?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как объединить две таблицы?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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