Question

public class Feedback
{
 public virtual int Id { get; private set; }    
 public virtual string ContentText { get; set; }
 public virtual DateTime FeedbackDate { get; set; }
 public virtual Student student { get; set; }
}

Ma Feedback classe.

public class Student
{
 public virtual int Id { get; private set; }    
 public virtual int NumberOfStars { get; set; }
 public virtual IList<Feedback> Feedbacks { get; private set; }

 public Student()
 {
  Feedback = new List<Feedbacks>();
 }
}

Mon étudiant de classe

public class Course
{
 public virtual int Id { get; set; }
    // bla bla bla
 public virtual IList<Student> Students { get; private set; }

 public Course()
 {
  Students = new List<Student>();
 }

 public IList<Student> SortBy(string type)
 {
  // some other sorting
  else if (type.Equals("popular")){
   sortedStudents = session.CreateCriteria(typeof(Student))
    .CreateAlias("Student", "s")
    .CreateAlias("s.Feedback", "f")
    .AddOrder(Order.Desc( -------- ))
    .List();
  }

  return (IList<Student>) sortedStudents;
 }

}

classe Mon cours

Je veux que les élèves de tri dans un cours avec la méthode SortBy: si le type est x je vais trier la règle suivante (Students.Feedback.Count) * 5 + Student.NumberOfStars)

Comment?

Était-ce utile?

La solution 2

Requête avec LINQ

IList sortedStudents = (from student in this.Students
                        where student.Course == this
                        orderby (student.Feedbacks.Count*3 + student.NumberOfStars)
                        select student).ToList();

Autres conseils

HQL:

List<Student> sortedStudents = session
  .CreateQuery(
    @"from Students student
      where student.Course == :course
      order by size(student.Feedbacks) * 3 + student.NumberOfStars")
  .SetEntity("course", course)
  .List<Student>();

size est une fonction de HQL. Voir chapitre "Expressions" dans la documentation NH.

Vous pouvez également sélectionner des critères et trier avec LINQ.

Modifier

Je viens de voir que vous l'utilisez dans une propriété et vous peut les étudiants ont déjà en mémoire. Vous n'avez pas besoin d'une requête, juste de faire le tri.

return students
  .OrderBy(x => x.Feedback.Count * 5 + x.NumberOfStars)
  .ToList();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top