// use ordinals to speed up access to DataReader // links: // crud definition: https://en.wikipedia.org/wiki/Create,_read,_update_and_delete // docLink: http://sql2x.org/documentationLink/327451c3-64a8-4de8-b359-76742d634497 // parameters: // reader: IDataReader from SQLClient public void Populate(IDataReader reader, AirportsAvailableWithFilterDataOrdinals ordinals) { if (!reader.IsDBNull(ordinals.AirportId)) { AirportId = reader.GetGuid(ordinals.AirportId); } if (!reader.IsDBNull(ordinals.AirportIdentifierCode)) { AirportIdentifierCode = reader.GetString(ordinals.AirportIdentifierCode); } if (!reader.IsDBNull(ordinals.AirportName)) { AirportName = reader.GetString(ordinals.AirportName); } }
/// <summary>Get airports</summary> /// <cardinality>Many</cardinality> public List <AirportsAvailableWithFilterData> AirportsAvailableWithFilter( Guid departureAirportId, Guid arrivalAirportId, DateTime fromDateTime, DateTime untilDateTime ) { var ret = new List <AirportsAvailableWithFilterData>(); // distinct removed because of sql2x inadequety string sql = @" select a.airport_id ,dai.airport_identifier_code ,a.airport_name from airport as a inner join airport_identifier as dai on dai.airport_id = a.airport_id and dai.airport_identifier_type_rcd = dbo.ref('airport_identifier_type_ref.AC3') union select null ,'All' ,'All' "; if (departureAirportId != Guid.Empty) { sql += " and fl.departure_airport_id = @departure_airport_id\r\n"; } if (arrivalAirportId != Guid.Empty) { sql += " and fl.arrival_airport_id = @arrival_airport_id\r\n"; } sql += " order by a.airport_name\r\n"; using (var conn = new SqlConnection(Conn.ConnectionString)) { conn.Open(); conn.BeginTransaction(IsolationLevel.ReadUncommitted).Commit(); using (var command = new SqlCommand(sql, conn)) { command.Parameters.Add("@departure_airport_id", SqlDbType.UniqueIdentifier).Value = departureAirportId; command.Parameters.Add("@arrival_airport_id", SqlDbType.UniqueIdentifier).Value = arrivalAirportId; command.Parameters.Add("@from_date_time", SqlDbType.DateTime).Value = fromDateTime; command.Parameters.Add("@until_date_time", SqlDbType.DateTime).Value = untilDateTime; Logging log = Logging.PerformanceTimeStart("SolutionNorSolutionPort.DataAccessLayer.FlightSearch.AirportsAvailableWithFilter"); IDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult); log.PerformanceTimeStop(sql, command); var ordinals = new AirportsAvailableWithFilterDataOrdinals(reader); while (reader.Read()) { var data = new AirportsAvailableWithFilterData(); data.Populate(reader, ordinals); ret.Add(data); } reader.Close(); } return(ret); } }