Я хочу выполнить JOIN
для двух таблиц данных в наборе данных. Например, я работаю над базой данных AdventureWorks. Мне нужны данные из таблиц [Person].[Address]
и [Person].[StateProvince]
, и как только данные находятся в соответствующих таблицах данных, я должен выполнить столбец JOIN
для StateProvinceID
.
Структура данных -
Address {Address,A_StateID}
State {S_StateID,Name}
Мой поиск в интернете привел меня ко многим примерам, в которых говорилось, что мне придется использовать объект Datarelation для выполнения JOIN
. Примеры, которые я нашел, были похожи -
DataColumn childcolumn = dsAdd.Tables["Address"].Columns["A_StateID"];
DataColumn parentcolumn = dsAdd.Tables["State"].Columns["S_StateID"];
DataRelation relStateID = new DataRelation("StateRel", parentcolumn, childcolumn,false);
dsAdd.Relations.Add(relStateID);
Но я понятия не имею, что мне делать после того, как я добавил DataRelation для выполнения JOIN
. Итак, я решил сделать это сам -
//I added a new column to my Address table obtain the State Name after performing the `JOIN`
DataColumn A_State = new DataColumn("State");
A_State.DataType = typeof(string);
dsAdd.Tables["Address"].Columns.Add(A_State);
foreach (DataRow dr in dsAdd.Tables["Address"].Rows)
{
//for each row in the Address table I obtain the StateID
string stateid = dr.ItemArray[1].ToString();
string expression = "S_StateID =" + stateid;
//Obtain the corresponding row from State table and update the value in new column in Address table
DataRow[] newdr;
newdr = dsAdd.Tables["State"].Select(expression);
string statename = newdr[0].ItemArray[1].ToString();
dr.SetField("State", statename.ToString());
}
grdJoins.DataSource = dsAdd.Tables["Address"];
grdJoins.DataBind();
Это прекрасно работает, но есть ли лучший способ сделать это? Как JOIN
выполняется с использованием объекта Datarelation?