// --- Seat --- // private static IEnumerable <ISeat> GetSeatByRule(IArrangeSeatRule organizationSeatingRule, IEnumerable <ISeat> targetAreaSeats, bool includeUnOpenSeat) { if (organizationSeatingRule.Methodology == ArrangeSeatMethodology.Sequence) { List <ISeat> targetAreaSeatsArray = targetAreaSeats.OrderBy(o => o.Index).ToList(); int seatAmount = targetAreaSeatsArray.Count; int currentIndex = targetAreaSeatsArray.IndexOf(organizationSeatingRule.TargetSeat); for (int i = 0; i < seatAmount; i++) { if (currentIndex >= seatAmount) { currentIndex = 0; } if (includeUnOpenSeat) { yield return(targetAreaSeatsArray[currentIndex]); } else if (targetAreaSeatsArray[currentIndex].IsOpen) { yield return(targetAreaSeatsArray[currentIndex]); } currentIndex++; } } else //if(organizationSeatingRule.Methodology == ArrangeSeatMethodology.Centralize) { var distance = targetAreaSeats.ToDictionary <ISeat, ISeat, double> (iss => iss, iss => (iss.XCord - organizationSeatingRule.TargetSeat.XCord) * (iss.XCord - organizationSeatingRule.TargetSeat.XCord) + (iss.XCord - organizationSeatingRule.TargetSeat.YCord) * (iss.XCord - organizationSeatingRule.TargetSeat.YCord)); foreach (var kvp in distance.OrderBy(dn => dn.Value)) { if (includeUnOpenSeat) { yield return(kvp.Key); } else if (kvp.Key.IsOpen) { yield return(kvp.Key); } } } }
// --- Seat --- // private static IEnumerable<ISeat> GetSeatByRule(IArrangeSeatRule organizationSeatingRule, IEnumerable<ISeat> targetAreaSeats, bool includeUnOpenSeat) { if (organizationSeatingRule.Methodology == ArrangeSeatMethodology.Sequence) { List<ISeat> targetAreaSeatsArray = targetAreaSeats.OrderBy(o => o.Index).ToList(); int seatAmount = targetAreaSeatsArray.Count; int currentIndex = targetAreaSeatsArray.IndexOf(organizationSeatingRule.TargetSeat); for (int i = 0; i < seatAmount; i++) { if (currentIndex >= seatAmount) currentIndex = 0; if (includeUnOpenSeat) { yield return targetAreaSeatsArray[currentIndex]; } else if (targetAreaSeatsArray[currentIndex].IsOpen) { yield return targetAreaSeatsArray[currentIndex]; } currentIndex++; } } else //if(organizationSeatingRule.Methodology == ArrangeSeatMethodology.Centralize) { var distance = targetAreaSeats.ToDictionary<ISeat, ISeat, double> (iss => iss, iss => (iss.XCord - organizationSeatingRule.TargetSeat.XCord) * (iss.XCord - organizationSeatingRule.TargetSeat.XCord) + (iss.XCord - organizationSeatingRule.TargetSeat.YCord) * (iss.XCord - organizationSeatingRule.TargetSeat.YCord)); foreach (var kvp in distance.OrderBy(dn => dn.Value)) { if (includeUnOpenSeat) yield return kvp.Key; else if (kvp.Key.IsOpen) yield return kvp.Key; } } }