public void BindSurivorToBunk(Survivor s) { Bunk bunk = bunks_available.Pop(); s.gameObject.GetComponent <SurvivorHolder>().bunk_occupied = bunk; bunks_occupied.Push(bunk); }
PromotionBunk loadPromotionBunk(Bunk bunk, DbDataReader reader) { PromotionBunk result = null; var id = reader.GetGuid(1); if (null == bunk || id != bunk.Id) { result = new PromotionBunk(reader.GetGuid(1)) { AirlineCode = reader.IsDBNull(2) ? string.Empty : reader.GetString(2), FlightBeginDate = reader.GetDateTime(3), ETDZDate = reader.GetDateTime(5), Code = reader.GetString(6), Valid = reader.GetBoolean(9), Description = reader.IsDBNull(12) ? string.Empty : reader.GetString(12), ModifyTime = reader.GetDateTime(13) }; if (!reader.IsDBNull(4)) { result.FlightEndDate = reader.GetDateTime(4); } } else { result = bunk as PromotionBunk; } var extendedBunk = loadWithoutDiscountExtendedBunk(reader); if (!string.IsNullOrWhiteSpace(extendedBunk)) { result.AddExtended(extendedBunk); } return(result); }
TeamBunk loadTeamBunk(Bunk bunk, DbDataReader reader) { TeamBunk result = null; var id = reader.GetGuid(1); if (null == bunk || id != bunk.Id) { result = new TeamBunk(reader.GetGuid(1)) { AirlineCode = reader.IsDBNull(2) ? string.Empty : reader.GetString(2), FlightBeginDate = reader.GetDateTime(3), ETDZDate = reader.GetDateTime(5), Code = reader.GetString(6), Valid = reader.GetBoolean(9), ModifyTime = reader.GetDateTime(13) }; if (!reader.IsDBNull(4)) { result.FlightEndDate = reader.GetDateTime(4); } } else { result = bunk as TeamBunk; } return(result); }
public static void AddBunk(BunkView bunkView, string account) { var bunk = Bunk.CreateBunk(bunkView); BunkCollection.Instance.Add(bunk.Id, bunk); saveAddLog("舱位", bunk.ToString(), bunk.Id.ToString(), account); }
public static string GetGeneralBunkRegulation(Bunk bunk) { var pattern = new Regex("^[a-zA-Z\\d/]+$"); var refundDetail = ChinaPay.B3B.Service.FoundationService.QueryDetailList(bunk.Owner.Airline, bunk.Code).Where(item => pattern.IsMatch(item.Bunks)); StringBuilder result = new StringBuilder(); string refundRegulation = string.Empty; string changeRegulation = string.Empty; string endorseRegulation = string.Empty; foreach (var item in refundDetail) { refundRegulation += ("航班起飞前:" + item.ScrapBefore + ";航班起飞后:" + item.ScrapAfter).Replace("<br/>", "").Replace("\r", "").Replace("\n", "").Replace("\t", ""); changeRegulation += ("航班起飞前:" + item.ChangeBefore + ";航班起飞后:" + item.ChangeAfter).Replace("<br/>", "").Replace("\r", "").Replace("\n", "").Replace("\t", ""); endorseRegulation += item.Endorse.Replace("<br/>", "").Replace("\r", "").Replace("\n", "").Replace("\t", ""); } if (string.IsNullOrWhiteSpace(refundRegulation)) { refundRegulation = "以航司具体规定为准"; } if (string.IsNullOrWhiteSpace(changeRegulation)) { changeRegulation = "以航司具体规定为准"; } result.AppendFormat("退票规定:{0} ", refundRegulation); result.AppendFormat("更改规定:{0} ", changeRegulation); result.AppendFormat("签转规定:{0} ", endorseRegulation); return(result.ToString()); }
public int Update(Bunk value) { using (var dbOperator = new DbOperator(Provider, ConnectionString)) { var sql = prepareDelete(dbOperator, value) + ";" + prepareInsert(dbOperator, value); return(dbOperator.ExecuteNonQuery(sql)); } }
private static BunkFilterInfo GetBunkFilters(Bunk bunk) { return(new BunkFilterInfo { Code = bunk.Code, Discount = (bunk is GeneralBunk) ? ((GeneralBunk)bunk).Discount : 0, Type = bunk.Type }); }
// Start is called before the first frame update void Start() { survivor = gameObject.GetComponent <Survivor>(); bunk_occupied = null; name_text.text = survivor.name; health_text.text = survivor.health.ToString(); combat_text.text = survivor.combat_score.ToString(); }
public int Delete(Bunk value) { using (var dbOperator = new DbOperator(Provider, ConnectionString)) { var deleteSql = prepareDelete(dbOperator, value); return(dbOperator.ExecuteNonQuery(deleteSql)); } }
public Bunk QueryBunkNew(Guid id) { string sql = "SELECT T1.[Type],T1.[Id],T1.[Airline],T1.[FlightBeginDate],T1.[FlightEndDate],T1.[ETDZDate],T1.[Code]," + "T1.[Discount],T1.[RefundRegulation],T1.[Valid],T1.[Departure],T1.[Arrival],T1.[Description],T1.ModifyTime," + "T2.[Code],T2.[Discount],T1.[ChangeRegulation],T1.[EndorseRegulation],T1.[Remarks],T1.[VoyageType],T1.[TravelType],T1.[PassengerType]" + "FROM [T_Bunk] T1 LEFT JOIN [T_ExtendedBunk] T2 ON T1.ID=T2.BunkId WHERE T1.[Id]=@Id"; Bunk bunk = null; using (var dbOperator = new DbOperator(Provider, ConnectionString)) { dbOperator.AddParameter("Id", id); using (var reader = dbOperator.ExecuteReader(sql)) { while (reader.Read()) { var bunkType = (BunkType)reader.GetInt32(0); switch (bunkType) { case BunkType.Economic: bunk = loadEconomicBunk(bunk, reader); break; case BunkType.FirstOrBusiness: bunk = loadFirstBusinessBunk(bunk, reader); break; case BunkType.Promotion: bunk = loadPromotionBunk(bunk, reader); break; case BunkType.Production: bunk = loadProductionBunk(bunk, reader); break; case BunkType.Transfer: bunk = loadTransferBunk(bunk, reader); break; case BunkType.Free: bunk = loadFreeBunk(bunk, reader); break; case BunkType.Team: bunk = loadTeamBunk(bunk, reader); break; } bunk.VoyageType = (VoyageTypeValue)reader.GetByte(19); bunk.TravelType = (TravelTypeValue)reader.GetByte(20); bunk.PassengerType = (PassengerTypeValue)reader.GetByte(21); bunk.RefundRegulation = reader.IsDBNull(8) ? string.Empty : reader.GetString(8); bunk.ChangeRegulation = reader.IsDBNull(16) ? string.Empty : reader.GetString(16); bunk.EndorseRegulation = reader.IsDBNull(17) ? string.Empty : reader.GetString(17); bunk.Remarks = reader.IsDBNull(18) ? string.Empty : reader.GetString(18); } } } return(bunk); }
public static void UpdateBunk(Guid id, BunkView bunkView, string account) { var originalBunk = QueryBunkNew(id); if (null == originalBunk) { throw new ChinaPay.Core.CustomException("原舱位不存在"); } var originalContent = originalBunk.ToString(); var bunk = Bunk.CreateBunk(id, bunkView); BunkCollection.Instance.Update(bunk.Id, bunk); saveUpdateLog("舱位", originalContent, bunk.ToString(), bunk.Id.ToString(), account); }
public int Insert(Bunk value) { using (var dbOperator = new DbOperator(Provider, ConnectionString)) { var insertSql = prepareInsert(dbOperator, value); if (string.IsNullOrWhiteSpace(insertSql)) { return(-1); } else { return(dbOperator.ExecuteNonQuery(insertSql)); } } }
/// <summary> /// 新增宿舍类型信息 /// </summary> /// <param name="webModel">编辑页视图模型</param> /// <param name="context">数据库上下文对象</param> /// <returns></returns> public static async Task <Bunk> InsertAsync(BunkEditViewModel webModel, ApplicationDbContext context) { var model = new Bunk { IsEnabled = (int)webModel.IsEnabled == 1, ImageSrc = webModel.ImageSrc, Name = webModel.Name, Number = webModel.Number, Toward = webModel.Toward.ToString(), CreatedId = CurrentUser.UserId, CreatedBy = CurrentUser.UserOID, CreatedName = CurrentUser.UserName }; await context.Bunk.AddAsync(model); return(model); }
FirstBusinessBunk loadFirstBusinessBunk(Bunk bunk, DbDataReader reader) { FirstBusinessBunk result = null; var id = reader.GetGuid(1); if (null == bunk || id != bunk.Id) { result = new FirstBusinessBunk(reader.GetGuid(1)) { AirlineCode = reader.IsDBNull(2) ? string.Empty : reader.GetString(2), FlightBeginDate = reader.GetDateTime(3), ETDZDate = reader.GetDateTime(5), Code = reader.GetString(6), Discount = reader.GetDecimal(7), Valid = reader.GetBoolean(9), DepartureCode = reader.IsDBNull(10) ? string.Empty : reader.GetString(10), ArrivalCode = reader.IsDBNull(11) ? string.Empty : reader.GetString(11), Description = reader.IsDBNull(12) ? string.Empty : reader.GetString(12), ModifyTime = reader.GetDateTime(13) }; if (!reader.IsDBNull(4)) { result.FlightEndDate = reader.GetDateTime(4); } } else { result = bunk as FirstBusinessBunk; } var extendedBunk = loadExtendedBunk(reader); if (extendedBunk != null) { result.AddExtended(extendedBunk); } return(result); }
/// <summary> /// 航班查询 /// 往返回程 /// </summary> /// <param name="departure">出发机场 三字码</param> /// <param name="arrival">到达机场 三字码</param> /// <param name="flightDate">航班日期</param> /// <param name="firstTripAirline">去程航空公司 二字码</param> /// <param name="firstTripFlightArrivalTime">去程航班降落时间</param> public static IEnumerable <Flight> QueryRTSecondTipFlights(UpperString departure, UpperString arrival, DateTime flightDate, UpperString firstTripAirline, DateTime firstTripFlightArrivalTime, Common.Enums.PolicyType firstTripPolicyType, Bunk firstTripBunk, Guid oemId) { var flightBeginTime = Time.Min; if (flightDate.Date <= firstTripFlightArrivalTime.Date) { var tempFlightBeginTime = firstTripFlightArrivalTime.AddHours(2); if (tempFlightBeginTime.Date > flightDate.Date) { return(new List <Flight>()); } flightBeginTime = new Time(tempFlightBeginTime); } var originalFlightDatas = FlightDatasCenter.GetFlights(departure.Value, arrival.Value, flightDate, firstTripAirline.Value, flightBeginTime, oemId); return(FlightProcessor.Execute(originalFlightDatas, new RTSecondTripBunkFilter(firstTripPolicyType, firstTripBunk))); }
string prepareDelete(DbOperator dbOperator, Bunk value) { dbOperator.AddParameter("DELETEBUNKID", value.Id); return("DELETE FROM [T_ExtendedBunk] WHERE [BUNKID]=@DELETEBUNKID;DELETE FROM [T_Bunk] WHERE [ID]=@DELETEBUNKID;"); }
string prepareInsert(DbOperator dbOperator, Bunk value) { string bunkSql = "INSERT INTO [T_Bunk]([Id],[Airline],[FlightBeginDate],[FlightEndDate],[ETDZDate],[Code],[Discount],[Valid],[Departure]," + "[Arrival],[Type],[Description],ModifyTime,[VoyageType],[TravelType],[PassengerType],[RefundRegulation],[ChangeRegulation],[EndorseRegulation],[Remarks]) " + "VALUES(@ID,@AIRLINE,@FLIGHTBEGINDATE,@FLIGHTENDDATE,@ETDZDATE,@CODE,@DISCOUNT,@VALID,@DEPARTURE,@ARRIVAL,@TYPE,@DESCRIPTION," + "@ModifyTime,@VoyageType,@TravelType,@PassengerType,@RefundRegulation,@ChangeRegulation,@EndorseRegulation,@Remarks)"; string extendedBunkInsertSql = "INSERT INTO [T_ExtendedBunk] ([BunkId],[Code],[Discount])"; string extendedBunkValueFormat = " SELECT @ID,@CODE{0},@DISCOUNT{0} UNION ALL"; var sbSql = new StringBuilder(bunkSql); dbOperator.AddParameter("ID", value.Id); dbOperator.AddParameter("VoyageType", value.VoyageType); dbOperator.AddParameter("TravelType", value.TravelType); dbOperator.AddParameter("PassengerType", value.PassengerType); dbOperator.AddParameter("RefundRegulation", value.RefundRegulation); dbOperator.AddParameter("ChangeRegulation", value.ChangeRegulation); dbOperator.AddParameter("EndorseRegulation", value.EndorseRegulation); if (string.IsNullOrEmpty(value.Remarks)) { dbOperator.AddParameter("Remarks", DBNull.Value); } else { dbOperator.AddParameter("Remarks", value.Remarks); } if (value.AirlineCode.IsNullOrEmpty()) { dbOperator.AddParameter("AIRLINE", DBNull.Value); } else { dbOperator.AddParameter("AIRLINE", value.AirlineCode.Value); } dbOperator.AddParameter("FLIGHTBEGINDATE", value.FlightBeginDate); if (value.FlightEndDate.HasValue) { dbOperator.AddParameter("FLIGHTENDDATE", value.FlightEndDate.Value); } else { dbOperator.AddParameter("FLIGHTENDDATE", DBNull.Value); } dbOperator.AddParameter("ETDZDATE", value.ETDZDate); dbOperator.AddParameter("CODE", value.Code.Value); dbOperator.AddParameter("VALID", value.Valid); if (value is GeneralBunk) { var generalBunk = value as GeneralBunk; if (generalBunk.DepartureCode.IsNullOrEmpty()) { dbOperator.AddParameter("DEPARTURE", DBNull.Value); } else { dbOperator.AddParameter("DEPARTURE", generalBunk.DepartureCode.Value); } if (generalBunk.ArrivalCode.IsNullOrEmpty()) { dbOperator.AddParameter("ARRIVAL", DBNull.Value); } else { dbOperator.AddParameter("ARRIVAL", generalBunk.ArrivalCode.Value); } dbOperator.AddParameter("DISCOUNT", generalBunk.Discount); if (value is EconomicBunk) { dbOperator.AddParameter("DESCRIPTION", DBNull.Value); } else if (value is FirstBusinessBunk) { dbOperator.AddParameter("DESCRIPTION", (value as FirstBusinessBunk).Description ?? string.Empty); } if (generalBunk.Extended.Any()) { sbSql.Append(extendedBunkInsertSql); int index = 0; foreach (var item in generalBunk.Extended) { sbSql.AppendFormat(extendedBunkValueFormat, index); dbOperator.AddParameter("CODE" + index.ToString(), item.Code.Value); dbOperator.AddParameter("DISCOUNT" + index.ToString(), item.Discount); index++; } sbSql.Remove(sbSql.Length - 10, 10); } } else if (value is PromotionBunk) { var promotionBunk = value as PromotionBunk; dbOperator.AddParameter("DEPARTURE", DBNull.Value); dbOperator.AddParameter("ARRIVAL", DBNull.Value); dbOperator.AddParameter("DISCOUNT", DBNull.Value); dbOperator.AddParameter("DESCRIPTION", promotionBunk.Description ?? string.Empty); if (promotionBunk.Extended.Any()) { sbSql.Append(extendedBunkInsertSql); int index = 0; foreach (var item in promotionBunk.Extended) { sbSql.AppendFormat(extendedBunkValueFormat, index); dbOperator.AddParameter("CODE" + index.ToString(), item); dbOperator.AddParameter("DISCOUNT" + index.ToString(), 0); index++; } sbSql.Remove(sbSql.Length - 10, 10); } } else if (value is ProductionBunk) { dbOperator.AddParameter("DEPARTURE", DBNull.Value); dbOperator.AddParameter("ARRIVAL", DBNull.Value); dbOperator.AddParameter("DISCOUNT", DBNull.Value); dbOperator.AddParameter("DESCRIPTION", DBNull.Value); } else if (value is TransferBunk) { dbOperator.AddParameter("DEPARTURE", DBNull.Value); dbOperator.AddParameter("ARRIVAL", DBNull.Value); dbOperator.AddParameter("DISCOUNT", DBNull.Value); dbOperator.AddParameter("DESCRIPTION", DBNull.Value); } else if (value is FreeBunk) { dbOperator.AddParameter("DEPARTURE", DBNull.Value); dbOperator.AddParameter("ARRIVAL", DBNull.Value); dbOperator.AddParameter("DISCOUNT", DBNull.Value); dbOperator.AddParameter("DESCRIPTION", (value as FreeBunk).Description ?? string.Empty); } else if (value is TeamBunk) { dbOperator.AddParameter("DEPARTURE", DBNull.Value); dbOperator.AddParameter("ARRIVAL", DBNull.Value); dbOperator.AddParameter("DISCOUNT", DBNull.Value); dbOperator.AddParameter("DESCRIPTION", DBNull.Value); } else { return(null); } dbOperator.AddParameter("TYPE", (int)value.Type); dbOperator.AddParameter("ModifyTime", value.ModifyTime); return(sbSql.ToString()); }
private BunkInfo constructBunkView(Bunk bunk, MatchedPolicy policy, ChinaPay.B3B.Service.Foundation.Domain.BasicPrice price) { var result = new BunkInfo() { Policy = new ChinaPay.B3B.DataTransferObject.FlightQuery.PolicyView() { Id = policy.OriginalPolicy == null ? Guid.Empty : policy.OriginalPolicy.Id, Owner = policy.Provider, Type = policy.PolicyType, CustomerResource = false } }; result.ShowPrice = policy.ParValue != 0; if (policy.PolicyType == PolicyType.Special) { // 特殊票是单独处理的 var specialPolicy = policy.OriginalPolicy as DataTransferObject.Policy.SpecialPolicyInfo; result.Code = bunk == null ? string.Empty : bunk.Code; result.SeatCount = bunk == null ? specialPolicy.ResourceAmount : bunk.SeatCount; // 剩余位置数 从政策上获取 result.Fare = policy.ParValue.TrimInvaidZero(); // 票面价从政策上取 result.Rebate = string.Empty; // 无返点 result.Amount = policy.SettleAmount; result.Description = "特殊票"; result.BunkType = bunk == null ? new BunkType?() : bunk.Type; switch (specialPolicy.Type) { case SpecialProductType.Singleness: case SpecialProductType.Disperse: result.Policy.CustomerResource = true; break; case SpecialProductType.CostFree: result.Policy.CustomerResource = !specialPolicy.SynBlackScreen; result.ShowPrice = true; break; } } else { result.Code = bunk.Code; result.SeatCount = bunk.SeatCount; result.Fare = policy.ParValue.TrimInvaidZero(); result.Rebate = policy.Commission.TrimInvaidZero(); result.Amount = policy.SettleAmount; if (policy.PolicyType == PolicyType.Bargain && bunk is Service.FlightQuery.Domain.GeneralBunk) { result.Description = "特价票"; } else { if (bunk is Service.FlightQuery.Domain.FirstOrBusinessBunk) { result.Description = (bunk as Service.FlightQuery.Domain.FirstOrBusinessBunk).Description; } else if (bunk is Service.FlightQuery.Domain.EconomicBunk) { result.Description = "经济舱"; } else if (bunk is Service.FlightQuery.Domain.PromotionBunk) { result.Description = (bunk as Service.FlightQuery.Domain.PromotionBunk).Description; } else if (bunk is Service.FlightQuery.Domain.ProductionBunk) { result.Description = "往返产品"; } else { result.Description = string.Empty; } } result.BunkType = bunk.Type; } if (bunk != null && bunk is Service.FlightQuery.Domain.GeneralBunk) { result.Discount = ((bunk as Service.FlightQuery.Domain.GeneralBunk).Discount).TrimInvaidZero(); if (policy.PolicyType == PolicyType.Special) { result.RenderDiscount = price != null && policy.ParValue != 0 ? Math.Round(policy.ParValue / price.Price, 2).ToString() : string.Empty; } else { result.RenderDiscount = ((bunk as Service.FlightQuery.Domain.GeneralBunk).Discount).TrimInvaidZero(); } } else { result.RenderDiscount = result.Discount = string.Empty; } // 退改签规定 // 普通政策时,获取基础数据中普通舱位的退改签信息 // 其他情况,获取政策上的退改签信息 if ((policy.PolicyType == PolicyType.Normal || policy.PolicyType == PolicyType.NormalDefault || policy.PolicyType == PolicyType.OwnerDefault) && bunk is Service.FlightQuery.Domain.GeneralBunk) { result.EI = GetGeneralBunkRegulation(bunk); } else { if (policy.OriginalPolicy is DataTransferObject.Policy.IHasRegulation) { var regulation = policy.OriginalPolicy as DataTransferObject.Policy.IHasRegulation; result.EI = GetRegulation(regulation); } else { result.EI = string.Empty; } } result.SuportChild = bunk != null && bunk.SuportChild; return(result); }
public IEnumerable <Bunk> QueryBunkListView(DataTransferObject.Foundation.BunkQueryCondition condition, Core.Pagination pagination) { var result = new List <Bunk>(); using (var dbOperator = new DbOperator(Provider, ConnectionString)) { if (!string.IsNullOrWhiteSpace(condition.Airline)) { dbOperator.AddParameter("@iAirline", condition.Airline.Trim()); } if (!string.IsNullOrWhiteSpace(condition.Departure)) { dbOperator.AddParameter("@iDeparture", condition.Departure.Trim()); } if (!string.IsNullOrWhiteSpace(condition.Arrival)) { dbOperator.AddParameter("@iArrival", condition.Arrival.Trim()); } if (!string.IsNullOrWhiteSpace(condition.BunkCode)) { dbOperator.AddParameter("@iBunkCode", condition.BunkCode.Trim()); } if (condition.BunkType.HasValue) { dbOperator.AddParameter("@iBunkType", (int)condition.BunkType); } if (condition.VoyageType.HasValue) { dbOperator.AddParameter("@iVoyageType", (byte)condition.VoyageType); } if (condition.FlightBeginDate.HasValue) { dbOperator.AddParameter("@iFlightBeginDate", condition.FlightBeginDate.Value.Date); } if (condition.FlightEndDate.HasValue) { dbOperator.AddParameter("@iFlightEndDate", condition.FlightEndDate.Value.Date); } if (condition.Status.HasValue) { dbOperator.AddParameter("@iStatus", condition.Status); } if (pagination != null) { dbOperator.AddParameter("@iPageSize", pagination.PageSize); dbOperator.AddParameter("@iPageIndex", pagination.PageIndex); } System.Data.Common.DbParameter totalCount = dbOperator.AddParameter("@oTotalCount"); totalCount.DbType = System.Data.DbType.Int32; totalCount.Direction = System.Data.ParameterDirection.Output; using (System.Data.Common.DbDataReader reader = dbOperator.ExecuteReader("dbo.P_QueryBunks", System.Data.CommandType.StoredProcedure)) { Guid?previousId = null; Bunk bunk = null; while (reader.Read()) { var currentId = reader.GetGuid(1); if (bunk == null || previousId.Value != currentId) { bunk = null; } var bunkType = (BunkType)reader.GetInt32(0); switch (bunkType) { case BunkType.Economic: bunk = loadEconomicBunk(bunk, reader); break; case BunkType.FirstOrBusiness: bunk = loadFirstBusinessBunk(bunk, reader); break; case BunkType.Promotion: bunk = loadPromotionBunk(bunk, reader); break; case BunkType.Production: bunk = loadProductionBunk(bunk, reader); break; case BunkType.Transfer: bunk = loadTransferBunk(bunk, reader); break; case BunkType.Free: bunk = loadFreeBunk(bunk, reader); break; case BunkType.Team: bunk = loadTeamBunk(bunk, reader); break; } bunk.VoyageType = (VoyageTypeValue)reader.GetByte(19); bunk.TravelType = (TravelTypeValue)reader.GetByte(20); bunk.PassengerType = (PassengerTypeValue)reader.GetByte(21); bunk.RefundRegulation = reader.IsDBNull(8) ? string.Empty : reader.GetString(8); bunk.ChangeRegulation = reader.IsDBNull(16) ? string.Empty : reader.GetString(16); bunk.EndorseRegulation = reader.IsDBNull(17) ? string.Empty : reader.GetString(17); bunk.Remarks = reader.IsDBNull(18) ? string.Empty : reader.GetString(18); if (!previousId.HasValue || previousId.Value != currentId) { result.Add(bunk); previousId = currentId; } } } if (pagination.GetRowCount) { pagination.RowCount = (int)totalCount.Value; } } return(result); }
//Use AutoMapper to Map public static BunkViewModel Map(Bunk source) { return(Mapper.Map <Bunk, BunkViewModel>(source)); }
public IEnumerable <KeyValuePair <Guid, Bunk> > Query() { string sql = "SELECT T1.[Type],T1.[Id],T1.[Airline],T1.[FlightBeginDate],T1.[FlightEndDate],T1.[ETDZDate],T1.[Code]," + "T1.[Discount],T1.[RefundRegulation],T1.[Valid],T1.[Departure],T1.[Arrival],T1.[Description],T1.ModifyTime," + "T2.[Code],T2.[Discount],T1.[ChangeRegulation],T1.[EndorseRegulation],T1.[Remarks],T1.[VoyageType],T1.[TravelType],T1.[PassengerType]" + "FROM [T_Bunk] T1 LEFT JOIN [T_ExtendedBunk] T2 ON T1.ID=T2.BunkId ORDER BY T1.[Id]"; var result = new List <KeyValuePair <Guid, Bunk> >(); using (var dbOperator = new DbOperator(Provider, ConnectionString)) { using (var reader = dbOperator.ExecuteReader(sql)) { Guid?previousId = null; Bunk bunk = null; while (reader.Read()) { var currentId = reader.GetGuid(1); if (bunk == null || previousId.Value != currentId) { bunk = null; } var bunkType = (BunkType)reader.GetInt32(0); switch (bunkType) { case BunkType.Economic: bunk = loadEconomicBunk(bunk, reader); break; case BunkType.FirstOrBusiness: bunk = loadFirstBusinessBunk(bunk, reader); break; case BunkType.Promotion: bunk = loadPromotionBunk(bunk, reader); break; case BunkType.Production: bunk = loadProductionBunk(bunk, reader); break; case BunkType.Transfer: bunk = loadTransferBunk(bunk, reader); break; case BunkType.Free: bunk = loadFreeBunk(bunk, reader); break; case BunkType.Team: bunk = loadTeamBunk(bunk, reader); break; } bunk.VoyageType = (VoyageTypeValue)reader.GetByte(19); bunk.TravelType = (TravelTypeValue)reader.GetByte(20); bunk.PassengerType = (PassengerTypeValue)reader.GetByte(21); bunk.RefundRegulation = reader.IsDBNull(8) ? string.Empty : reader.GetString(8); bunk.ChangeRegulation = reader.IsDBNull(16) ? string.Empty : reader.GetString(16); bunk.EndorseRegulation = reader.IsDBNull(17) ? string.Empty : reader.GetString(17); bunk.Remarks = reader.IsDBNull(18) ? string.Empty : reader.GetString(18); if (!previousId.HasValue || previousId.Value != currentId) { result.Add(new KeyValuePair <Guid, Bunk>(bunk.Id, bunk)); previousId = currentId; } } } } return(result); }