void run()
        {
            var           byBuildingId    = CreateTestBuildingsById();            // Create some test data.
            var           byImprovementId = CreateImprovementsById(byBuildingId); // Create the alternative lookup dictionaries.
            var           testTuples      = CreateTestTuples();
            ImprovementId improvementId   = new ImprovementId(5010);
            int           count           = 10000;
            Stopwatch     sw = Stopwatch.StartNew();

            for (int i = 0; i < count; ++i)
            {
                byImprovementId[improvementId].Sum(result => result.Value.Data);
            }
            Console.WriteLine("Dictionary of dictionaries took " + sw.Elapsed);
            sw.Restart();
            for (int i = 0; i < count; ++i)
            {
                testTuples.Where(result => result.Key.Item2.Equals(improvementId)).Sum(item => item.Value.Data);
            }
            Console.WriteLine("Dictionary of tuples took " + sw.Elapsed);
        }
        void run()
        {
            var byBuildingId    = CreateTestBuildingsById();                // Create some test data.
            var byImprovementId = CreateImprovementsById(byBuildingId);     // Create the alternative lookup dictionaries.
            // Aggregate data for all improvements for building with ID == 1500:
            BuildingId buildingId = new BuildingId(1500);
            var        sum        = byBuildingId[buildingId].Sum(result => result.Value.Data);

            Console.WriteLine(sum);
            // Aggregate data for all buildings with a given improvement.
            ImprovementId improvementId = new ImprovementId(5010);

            sum = byBuildingId.Sum(improvements =>
            {
                Result result;
                return(improvements.Value.TryGetValue(improvementId, out result) ? result.Data : 0.0);
            });
            Console.WriteLine(sum);
            // Aggregate data for all buildings with a given improvement using byImprovementId.
            // This will be much faster than the above Linq.
            sum = byImprovementId[improvementId].Sum(result => result.Value.Data);
            Console.WriteLine(sum);
        }