private IQueryOver <MyTraining, MyTraining> getMyTrainingsCriterias(IQueryOver <MyTraining, MyTraining> queryProducts, GetMyTrainingsParam param) { queryProducts = queryProducts.ApplyUser(param, Session, SecurityInfo); if (queryProducts == null) { return(null); } if (param.MyTrainingId.HasValue) { queryProducts = queryProducts.Where(day => day.GlobalId == param.MyTrainingId.Value); } if (param.StartDate.HasValue) { queryProducts = queryProducts.Where(day => day.StartDate >= param.StartDate); } if (param.EndDate.HasValue) { queryProducts = queryProducts.Where(day => day.StartDate <= param.EndDate); } if (param.TrainingEnds.Count > 0) { var langOr = Restrictions.Disjunction(); foreach (var lang in param.TrainingEnds) { langOr.Add <MyTraining>(x => x.TrainingEnd == (TrainingEnd)lang); } queryProducts = queryProducts.And(langOr); } IQueryOverOrderBuilder <MyTraining, MyTraining> orderBuilder; switch (param.SortOrder) { case MyTrainingSortOrder.StartDate: orderBuilder = queryProducts.OrderBy(x => x.StartDate); break; case MyTrainingSortOrder.PercentageCompleted: orderBuilder = queryProducts.OrderBy(x => x.PercentageCompleted); break; default: orderBuilder = queryProducts.OrderBy(x => x.Name); break; } if (param.SortAscending) { queryProducts = orderBuilder.Asc; } else { queryProducts = orderBuilder.Desc; } return(queryProducts); }