public List<Trip> Search(string username, string depDate, int? depLocId, int? arrLocId, double? price, int? seatNum, int? estHour, int? hour) { GenericRepository<Trip> tripRepo = new GenericRepository<Trip>(); GenericRepository<User> userRepo = new GenericRepository<User>(); DateTime departDate; List<Expression<Func<Trip, bool>>> filters = new List<Expression<Func<Trip, bool>>>(); if (!string.IsNullOrEmpty(depDate)) { if (DateTime.TryParse(depDate, out departDate)) { filters.Add(t => t.DepartDate >= departDate); } } if (!string.IsNullOrEmpty(username)) { User user = userRepo.First(u => u.Username.Contains(username)); filters.Add(t => t.UserId == user.UserId); } if (seatNum != -1) { filters.Add(t => t.AvailableSeatNumber >= seatNum); } if (depLocId != -1) { filters.Add(t => t.DepartLocationId == depLocId); } if (arrLocId != -1) { filters.Add(t => t.ArrivalLocationId == arrLocId); } if (hour != 0) { filters.Add(t => t.DepHour >= hour); } if (estHour != 0) { filters.Add(t => t.EstimatedHour < estHour); } if (price!= null) { filters.Add(t => t.Price <= price); } return tripRepo.GetByMultipleConditions(filters).ToList(); }