/// <summary>
        /// Retrieve the price paid records from a land registry .csv file
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public IEnumerable <HouseSaleDataCsvRow> GetRows()
        {
            _parser.TextFieldType = FieldType.Delimited;
            _parser.SetDelimiters(",");

            String[] currentRow = null;

            List <HouseSaleDataCsvRow> pricePaidRecords = new List <HouseSaleDataCsvRow>();

            while (!_parser.EndOfData)
            {
                currentRow = _parser.ReadFields();

                try
                {
                    HouseSaleDataCsvRow record = BuildPricePaidRecordFromRowFields(currentRow);
                    pricePaidRecords.Add(record);
                }
                catch (MalformedLineException ex)
                {
                    // TODO: NLog
                    Console.WriteLine("Row: {0}, Error: {1}", currentRow[TransactionIdentifierIndex], ex.Message);
                }
            }

            return(pricePaidRecords.AsReadOnly());
        }
        /// <summary>
        /// Build a new PricePaidRecord from the row fields
        /// </summary>
        /// <param name="fields"></param>
        /// <returns></returns>
        private HouseSaleDataCsvRow BuildPricePaidRecordFromRowFields(String[] fields)
        {
            HouseSaleDataCsvRow newRecord = new HouseSaleDataCsvRow();

            newRecord.Id                   = ParseTransactionIdentifier(fields[TransactionIdentifierIndex]);
            newRecord.Price                = decimal.Parse(fields[PriceIndex]);
            newRecord.DateOfTransfer       = DateTime.Parse(fields[DateOfTransferIndex]);
            newRecord.Postcode             = fields[PostcodeIndex];
            newRecord.PropertyType         = ParsePropertyType(fields[PropertyTypeIndex]);
            newRecord.NewBuild             = ParseNewBuild(fields[NewBuildIndex]);
            newRecord.Holding              = ParseHolding(fields[HoldingIndex]);
            newRecord.PrimaryAddressName   = fields[PrimaryAddressIndex];
            newRecord.SecondaryAddressName = fields[SecondaryAddressIndex];
            newRecord.Street               = fields[StreetIndex];
            newRecord.Locality             = fields[LocalityIndex];
            newRecord.TownOrCity           = fields[TownOrCityIndex];
            newRecord.District             = fields[DistrictIndex];
            newRecord.County               = fields[CountyIndex];
            newRecord.PPDCategory          = ParsePPDCategory(fields[PPDCategoryIndex]);
            newRecord.RecordStatus         = ParseRecordStatus(fields[RecordStatusIndex]);

            return(newRecord);
        }