我有N個數據表,其中N-1個數據表表示一些實體,1表示這些實體之間的關係。一個DataTable,它具有來自其他數據表的id,需要轉換這個數據表來替換id與他們的數據表名列值
像 實體國家
Country DATATABLE
ID | Country Name | Country Code
------------------------------------
ID1 | USA | USA
ID2 | INDIA | IND
ID3 | CHINA | CHI
實體大陸
Continent DATATABLE
ID | Continent Name | Continent Code
------------------------------------
IDC1 | NORTH AMERICA | NA
IDC2 | SOUTH AMERICA | SA
IDC3 | ASIA | AS
實體公司
Company DATATABLE
ID | Company Name | Company Code
------------------------------------
CM1 | XYZ Company | XYZ
CM2 | Fun Company | Fun
CM3 | ABC Company | ABC
這些之間的關係。
Company_Country_Continent_Relationship DataTable
ID | Company | Country | Continent | Some Value1 | Some Value 2
-------------------------------------------------------------------------------------
R1 | CM1 | ID1 | IDC1 | 100 | 150
R2 | CM2 | ID2 | IDC3 | 200 | 200
R3 | CM3 | ID1 | IDC1 | 150 | 250
R4 | CM1 | ID3 | IDC3 | 100 | 150
R5 | CM2 | ID1 | IDC1 | 200 | 200
R6 | CM3 | ID2 | IDC3 | 150 | 250
R7 | CM1 | ID2 | IDC3 | 100 | 150
R8 | CM2 | ID3 | IDC3 | 200 | 200
R9 | CM3 | ID3 | IDC3 | 150 | 250
現在我需要生成另一個關係表,將舉行,而不是ID名稱。 在這個例子中,關係數據存儲公司,國家和大陸的ID,現在我想將這些id值轉換成那裏的名字,而不是CM1 - XYZ公司。
對於此轉換,我正在使用方法TramnsformRelationshipData
,它正在正常工作。
public static DataTable TramnsformRelationshipData(DataTable relationshipData, Dictionary<string, DataTable> mapping)
{
DataTable transformedDataTable = null;
if (relationshipData == null || mapping == null)
return null;
transformedDataTable = relationshipData.Copy();
foreach (DataColumn item in relationshipData.Columns)
{
if (mapping.ContainsKey(item.ColumnName))
{
var instanceData = mapping[item.ColumnName];
if (instanceData == null)
return null;
foreach (DataRow row in transformedDataTable.Rows)
{
var filteredRows = instanceData.Select("ID = '" + row[item.ColumnName] + "'");
if (filteredRows.Any())
row[item.ColumnName] = filteredRows[0][1];
}
}
}
return transformedDataTable;
}
但是,這種方法迭代所有的數據表,並且是非常緩慢的,當有更多的實體relationshipdata改造。那麼,我怎樣才能優化這段代碼,以處理大量數據表中的大量行。
編輯:在大多數情況下,這些數據不會存儲在數據庫中,它們存儲在內存中,並且在內存中這些數據表的計數可以增加或減少。
謝謝。
如果存儲在內存中,它是否需要DataTable?將它加載到像dictionries這樣的結構中會不會更有效? 如果您最初從數據庫加載它,則可以使用簡單快速的數據閱讀器來填充字典。 – ElDog 2012-08-23 14:11:45