public static IEnumerable <ExtractFile> CreateParcelFiles(ExtractContext context)
        {
            var extractItems = context
                               .ParcelExtract
                               .AsNoTracking();

            var parcelProjectionState = context
                                        .ProjectionStates
                                        .AsNoTracking()
                                        .Single(m => m.Name == typeof(ParcelExtractProjections).FullName);
            var extractMetadata = new Dictionary <string, string>
            {
                { ExtractMetadataKeys.LatestEventId, parcelProjectionState.Position.ToString() }
            };

            yield return(ExtractBuilder.CreateDbfFile <ParcelDbaseRecord>(
                             ExtractController.ZipName,
                             new ParcelDbaseSchema(),
                             extractItems.OrderBy(m => m.CaPaKey).Select(org => org.DbaseRecord),
                             extractItems.Count));

            yield return(ExtractBuilder.CreateMetadataDbfFile(
                             ExtractController.ZipName,
                             extractMetadata));
        }
        // Only use in staging
        public static IEnumerable <ExtractFile> CreateStreetNameFilesV2(ExtractContext context,
                                                                        SyndicationContext syndicationContext)
        {
            var extractItems = context
                               .StreetNameExtractV2
                               .AsNoTracking()
                               .Where(x => x.Complete)
                               .OrderBy(x => x.StreetNamePersistentLocalId);

            var streetNameProjectionState = context
                                            .ProjectionStates
                                            .AsNoTracking()
                                            .Single(m => m.Name == typeof(StreetNameExtractProjectionsV2).FullName);
            var extractMetadata = new Dictionary <string, string>
            {
                { ExtractMetadataKeys.LatestEventId, streetNameProjectionState.Position.ToString() }
            };

            var cachedMunicipalities = syndicationContext.MunicipalityLatestItems.AsNoTracking().ToList();

            byte[] TransformRecord(StreetNameExtractItemV2 r)
            {
                var item = new StreetNameDbaseRecord();

                item.FromBytes(r.DbaseRecord, DbfFileWriter <StreetNameDbaseRecord> .Encoding);

                var municipality = cachedMunicipalities.First(x => x.NisCode == item.gemeenteid.Value);

                switch (municipality.PrimaryLanguage)
                {
                case Taal.NL:
                    item.straatnm.Value   = r.NameDutch;
                    item.homoniemtv.Value = r.HomonymDutch ?? string.Empty;
                    break;

                case Taal.FR:
                    item.straatnm.Value   = r.NameFrench;
                    item.homoniemtv.Value = r.HomonymFrench ?? string.Empty;
                    break;

                case Taal.DE:
                    item.straatnm.Value   = r.NameGerman;
                    item.homoniemtv.Value = r.HomonymGerman ?? string.Empty;
                    break;

                case Taal.EN:
                    item.straatnm.Value   = r.NameEnglish;
                    item.homoniemtv.Value = r.HomonymEnglish ?? string.Empty;
                    break;
                }

                return(item.ToBytes(DbfFileWriter <StreetNameDbaseRecord> .Encoding));
            }

            yield return(ExtractBuilder.CreateDbfFile <StreetNameExtractItemV2, StreetNameDbaseRecord>(
                             ExtractController.ZipName,
                             new StreetNameDbaseSchema(),
                             extractItems,
                             extractItems.Count,
                             TransformRecord));

            yield return(ExtractBuilder.CreateMetadataDbfFile(
                             ExtractController.ZipName,
                             extractMetadata));
        }