 <p>Assuming that the result is another <code>DataTable</code> with the aggregated data:</p> <pre><code>var aggrTable = table.Clone(); // schema only var groups = table.AsEnumerable() .GroupBy(r =&gt; new { ItemNumber = r.Field&lt;int&gt;("ItemNumber"), Cat1 = r.Field&lt;string&gt;("Cat1") }); foreach(var group in groups) { DataRow row = aggrTable.Rows.Add(); row.SetField("ItemNumber", group.Key.ItemNumber); row.SetField("Cat1", group.Key.Cat1); row.SetField("Low Price", group.Min(r =&gt; r.Field&lt;int&gt;("Low Price"))); row.SetField("High Price", group.Max(r =&gt; r.Field&lt;int&gt;("High Price"))); } </code></pre> <p>Result-table (tested with your sample data):</p> <pre><code> ItemNumber Cat1 Low Price High Price 100 Item1 1 12 150 Item2 2 18 </code></pre>