public void Expression_AggregateRelation()
{
DataTable parent = DataProvider.CreateParentDataTable();
DataTable child = DataProvider.CreateChildDataTable();
var ds = new DataSet();
ds.Tables.Add(parent);
ds.Tables.Add(child);
ds.Relations.Add("Relation1", parent.Columns[0], child.Columns[0], false);
//Create the computed columns
DataColumn dcComputedParent = new DataColumn("computedParent", Type.GetType("System.Double"));
parent.Columns.Add(dcComputedParent);
dcComputedParent.Expression = "sum(child(Relation1)." + child.Columns[1].ColumnName + ")";
double preCalculatedExpression;
foreach (DataRow dr in parent.Rows)
{
object o = child.Compute("sum(" + child.Columns[1].ColumnName + ")",
parent.Columns[0].ColumnName + "=" + dr[0]);
if (o == DBNull.Value)
{
Assert.Equal(dr["computedParent"], o);
}
else
{
preCalculatedExpression = Convert.ToDouble(o);
Assert.Equal(dr["computedParent"], preCalculatedExpression);
}
}
DataColumn dcComputedChild = new DataColumn("computedChild", Type.GetType("System.Double"));
child.Columns.Add(dcComputedChild);
dcComputedChild.Expression = "Parent." + parent.Columns[0].ColumnName;
int index = 0;
double val;
foreach (DataRow dr in child.Rows)
{
val = Convert.ToDouble(dr.GetParentRow("Relation1")[0]);
Assert.Equal(dr["computedChild"], val);
index++;
}
}