using System.Data.DataSetExtensions;
using System.Collections;
using System.Collections.Generic;
public static void Main()
var Table1 = new DataTable();
var Table2 = new DataTable();
Table1.Columns.Add("ID");
Table1.Columns.Add("Name");
Table1.Columns.Add("Order");
Table2.Columns.Add("ID");
Table2.Columns.Add("Name");
Table2.Columns.Add("Categorie");
Table1.Rows.Add(1, "Installation", 1);
Table1.Rows.Add(2, "Betrieb", 2);
Table1.Rows.Add(3, "Backup", 3);
Table1.Rows.Add(4, "Test", 4);
Table2.Rows.Add(1, "Server Installation", 1);
Table2.Rows.Add(2, "Dokumentation", 1);
Table2.Rows.Add(3, "Updates", 2);
Table2.Rows.Add(4, "Migration", 2);
Table2.Rows.Add(5, "Vollbackup", 3);
Table2.Rows.Add(6, "Backup Postfach", 3);
IEnumerable<DataRow> rows = Table2.AsEnumerable();
DataRow cat = Table1.AsEnumerable().Where(categorie => int.Parse((string)categorie["ID"]) == 2 ).FirstOrDefault();
Console.WriteLine(cat["Name"]);
var query = rows.GroupBy(row => new { Categorie = row["Categorie"], Order = Table1.AsEnumerable().Where(categorie => int.Parse((string)categorie["ID"]) == int.Parse((string)row["Categorie"])).FirstOrDefault()["Order"] } );
query = query.OrderBy(g => g.Key.Order);
foreach (var g in query) {
Console.WriteLine("Key: {0}", g.Key);
Console.WriteLine("\t{0}, {1}", item["ID"], item["Name"]);