Introduction
MS Dynamics CRM 4 returns data in a response object containing a BusinessEntityCollection. This code converts this BusinessEntityCollection into a simple .NET DataTable.
Using the code
For every property found in BusinessEntityCollection's each row, it checks if the DataTable already contains a column with that name. If the DataTable doesn't contain it, the function adds it to the DataTable and restarts traversing the currently selected row.
public DataTable convertBuinessEntityCollectionToDataTable(BusinessEntityCollection BEC)
{
DataTable dt = new DataTable();
int total = BEC.BusinessEntities.Length;
bool continueFlag = false;
for (int i = 0; i < total; i++)
{
DataRow row = dt.NewRow();
DynamicEntity myEntity = (DynamicEntity)BEC.BusinessEntities[i];
for (int j = 0; j < myEntity.Properties.Length; j++)
{
Property pp;
pp = myEntity.Properties[j];
string columnName = pp.Name;
string value = getNameFromProperty(pp);
if (dt.Columns.IndexOf(columnName) == -1)
{
dt.Columns.Add(pp.Name, Type.GetType("System.String"));
i--;
continueFlag = true;
break;
}
else
{
continueFlag=false;
}
row[columnName] = value;
}
if (continueFlag == true)
{
continue;
}
dt.Rows.Add(row);
}
return dt;
}
The code above calls a function getNameFromProperty() which can be found inside the attached zip file.