2.13. Adding a Column to a Parent DataTable That Aggregates a Child Table's Column Values

Problem

You want to add summary information such as averages, sums, and counts to a table based on related child rows.

Solution

Use expression columns to retrieve lookup values based on DataRelation objects.

The solution creates a new DataSet containing the Sales.SalesOrderHeader and Sales.SalesOrderDetail tables from AdventureWorks.A DataRelation is created between the tables. An expression column is added to the Sales.SalesOrderHeader table that gets the sum of the related LineTotal from the child Sales.SalesOrderDetail table. Parent and child rows are output to the console.

The C# code in Program.cs in the project AddAggregateChildColumnDataTable is shown in Example 2-13.

Example 2-13. File: Program.cs for AddAggregateChildColumnDataTable solution

using System; using System.Data; using System.Data.SqlClient; namespace AddAggregateChildColumnDataTable { class Program { static void Main(string[] args) { string sqlConnectString = "Data Source=(local);" + "Integrated security=SSPI;Initial Catalog=AdventureWorks;"; string sqlSelect = @"SELECT * FROM Sales.SalesOrderHeader; SELECT * FROM Sales.SalesOrderDetail;"; DataSet ds = new DataSet(); // Fill the DataSet SqlDataAdapter da = new SqlDataAdapter(sqlSelect, sqlConnectString); da.TableMappings.Add("Table", "SalesOrderHeader"); da.TableMappings.Add("Table1", "SalesOrderDetail"); da.Fill(ds); // Relate the Header and Order tables in the DataSet DataRelation ...

Get ADO.NET 3.5 Cookbook, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.