объединить две таблицы с linq для наборов данных - PullRequest
0 голосов
/ 11 августа 2009

Я хочу создать соединение между двумя таблицами и чтобы результат включал все столбцы двух таблиц. я хочу сделать это без указания конкретных имен столбцов, просто выберите все, потому что я не буду знать, сколько столбцов будут содержать две таблицы, и не буду знать их имен.

Я ПРОСТО ХОЧУ СОЗДАТЬ СОЕДИНЕНИЕ МЕЖДУ ДВУМЯ СТОЛАМИ, И В РЕЗУЛЬТАТ БУДУТ ВКЛЮЧЕНЫ ОБА СТОЛБЦОВ.

Как мне это сделать? какой тип результата должен быть?

я пробовал:

var res = from t1 in ds1.Tables["Table1"].AsEnumerable()
           join
          t2 in ds1.Tables["Table2"].AsEnumerable()
           on t1.Field<string>("TrID") equals t2.Field<string>("TrID")
                select new { t1, t2 };

но в результате я получаю странный тип, с которым ничего не могу поделать, не могу преобразовать его в dataTable, Dataset или представить в виде сетки.

Например, получить таблицу со столбцами [TrID], [SP], [SP2] без специального создания анонимного типа с этими тремя столбцами:

Table1 TrID SP Asaf1 Asaf2 F1 K2 Asaf1 D2 H1 F1

Table2
TrID SP2 Asaf1 Dor2 Asaf1 U1 R1 W1 I1 Y3

1 Ответ

0 голосов
/ 13 августа 2009

Нет способа волшебным образом объединить ваши две таблицы. Если вы хотите новый DataTable, вам нужно создать новый с соответствующими столбцами и добавить строки соответственно. Кроме того, вы действительно можете привязать анонимный тип к элементу управления, но не с вашим текущим анонимным типом двух DataRow свойств. Вместо этого вам нужно будет извлечь нужные поля:

var res = from t1 in ds1.Tables["Table1"].AsEnumerable()
          let id = t1.Field<string>("TrID")
          join t2 in ds1.Tables["Table2"].AsEnumerable()
            on id equals t2.Field<string>("TrID")
                select new {
                    TrID = id,
                    SP = t1.Field<string>("SP"),
                    SP2 = t2.Field<string>("SP2")
                };

Затем вы можете установить res в качестве источника данных и привязать к TrID, SP и SP2.

...