2012-04-17 4 views
0

У меня есть 3 таблицы данных, заполненные наборами данных и адаптерами таблицы/связывания, и мне нужно запустить запрос Join или найти другой способ получить конкретные данные. (Набор данных содержит каждую таблицу в списке)DataTable Join или Merge

Таблицы:

Таблица продукта:

Prod_ID Name  

1   tv 
2   couch 

Потребительские Таблица:

Con_Id Name City 
---------------------- 
1   Gray New York 
2   Joe  Chicago 
3   Steve Madison 

Сделки Таблица

Tran_Id Con_ID Prod_ID Price 
------------------------------------- 
1   2   1   900 
2   1   2   300 

Учитывая продукт имя мне нужно заполнить таблицу каждым отдельным городом и сколько этот продукт был продан в этом городе (добавьте все цены для этого продукта любому потребителю в данном городе)

Я действительно в тупике и не могу найти способ , (я пробовал много) Пожалуйста, помогите и спасибо!

Nudiers приближаются до сих пор:

  DataRelation relation = null; 
      DataColumn table1Column = null; 
      DataColumn table2Column = null; 
      DataColumn table3Column = null; 

      table1Column = tlobergeDataSet.Tb_Product.Columns[0]; 
      table2Column = tlobergeDataSet.Tb_Transactions.Columns[3]; 
      table3Column = tlobergeDataSet.Tb_Consumer.Columns[0]; 

      relation = new DataRelation("relation", table1Column, table2Column); 
      tlobergeDataSet.Relations.Add(relation); 
+0

Это лас tpart на мою домашнюю работу. Я попытался создать 3-мерные массивы и заполнить их данными, чтобы не было дубликатов, я попробовал запустить инструкции выбора в каждой таблице, чтобы вернуть правильную информацию (не могу узнать, как добавить значения после). Учитель сказал, что это можно сделать легко, используя linq, но я не знаком с ним, и я не могу заставить это работать. –

+1

Вы пробовали свойство отношений объекта набора данных? –

+0

Начните с http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b и попытайтесь создать свой собственный код. Отправьте свой код, и мы сможем помочь вам определить, где вы поступили неправильно, если у вас все еще есть проблемы. – JamieSee

ответ

0

В LINQ, вы можете присоединиться к таблицам, чтобы найти данные, которые вы хотите с синтаксисом, как так:

from a in keyTable 
join b in anotherTable on a.Key equals b.Key 
join c in aThirdTable on a.Key equals c.Key 
select new 
{ 
    // Anonymous Object Properties using identifier a, b, and c to get data 
}; 

Вы должны быть в состоянии принять этот фрагмент и генерировать запрос linq, который будет генерировать анонимный объект, содержащий требуемое представление данных.

+0

Есть столбцы a, b и c? И как бы я пошел на выбор отдельных городов с их ценовыми величинами? Благодаря! –

0

попробуйте с этим.

DataRelation relation = null; 
DataColumn table1Column = null; 
DataColumn table2Column = null; 
//retrieve column 
table1Column = ds.Tables("Table1").Columns(0); 
table2Column = ds.Tables("table2").Columns(0); 
//relating tables 
relation = new DataRelation("relation", table1Column, table2Column); 
//assign relation to dataset 
ds.Relations.Add(relation); 
+0

Можно ли добавить отношения к 3 таблицам? И как мне получить доступ к данным здесь? –

+0

* Я обновил его тем, что у меня есть от вас до сих пор –

0

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

 DataRelation relation = null; 
     DataColumn table1Column = null; 
     DataColumn table2Column = null; 
     DataColumn table3Column = null; 

     table1Column = tlobergeDataSet.Tb_Product.Columns[0]; 
     table2Column = tlobergeDataSet.Tb_Transactions.Columns[2]; 
     table2Column1 = tlobergeDataSet.Tb_Transactions.Columns[1]; 
     table3Column = tlobergeDataSet.Tb_Consumer.Columns[0]; 

     relation = new DataRelation("relation", table1Column, table2Column); 
     tlobergeDataSet.Relations.Add(relation); 

     relation = new DataRelation("relation1", table3Column , table2Column1); 
     tlobergeDataSet.Relations.Add(relation); 
+0

Благодарю вас! Можно ли использовать linq для выбора отдельных строк, но одновременно добавить строку Price?или мне нужно будет создать метод? –

2
public DataTable MergeTables(DataTable dtFirst, DataTable dtSecond, string CommonColumn) 
    { 
     DataTable dtResults = dtFirst.Clone(); 
     int count = 0; 
     for (int i = 0; i < dtSecond.Columns.Count; i++) 
     { 
      if (!dtFirst.Columns.Contains(dtSecond.Columns[i].ColumnName)) 
      { 
       dtResults.Columns.Add(dtSecond.Columns[i].ColumnName, dtSecond.Columns[i].DataType); 
       count++; 
      } 
     } 

     DataColumn[] columns = new DataColumn[count]; 
     int j = 0; 
     for (int i = 0; i < dtSecond.Columns.Count; i++) 
     { 
      if (!dtFirst.Columns.Contains(dtSecond.Columns[i].ColumnName)) 
      { 
       columns[j++] = new DataColumn(dtSecond.Columns[i].ColumnName, dtSecond.Columns[i].DataType); 
      } 
     } 

     dtResults.BeginLoadData(); 
     foreach (DataRow dr in dtFirst.Rows) 
     { 
      dtResults.Rows.Add(dr.ItemArray); 
     } 
     foreach (DataRow dr in dtSecond.Rows) 
     { 
      foreach (DataRow dr1 in dtResults.Rows) 
      { 
       if (dr1[CommonColumn].ToString().Equals(dr[CommonColumn].ToString())) 
       { 
        foreach (DataColumn c in columns) 
        { 
         dr1[c.ColumnName] = dr[c.ColumnName]; 
        } 
       } 
      } 
     } 
     dtResults.EndLoadData(); 
     return dtResults; 
    } 
Смежные вопросы