Solution using LINQ (bit long)
Code
# Code
```csharp []
public class Solution {
    public IList<IList<string>> DisplayTable(IList<IList<string>> orders) {
        var sortedFoods = orders
            .Select(order => order[2]) 
            .Distinct()
            .OrderBy(food => food, StringComparer.Ordinal)
            .ToList();
        var tableFoodCounts = orders
            .GroupBy(order => int.Parse(order[1]))
            .OrderBy(g => g.Key) 
            .ToDictionary(
                g => g.Key, 
                g => sortedFoods
                    .ToDictionary(
                        food => food, 
                        food => g.Count(order => order[2] == food) 
                    )
            );

        var result = new List<IList<string>>();

        var header = new List<string> { "Table" };
        header.AddRange(sortedFoods);
        result.Add(header);

        foreach (var table in tableFoodCounts) {
            var row = new List<string> { table.Key.ToString() }; 
            row.AddRange(sortedFoods.Select(food => table.Value.ContainsKey(food) ? table.Value[food].ToString() : "0"));
            result.Add(row);
        }

        return result;
    }
}
```
['Hash Table', 'Linked List', 'C#']