Frage

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; }
}

Ihr Feedback-Klasse.

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>();
 }
}

Mein Student Class

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;
 }

}

My Course Klasse

Ich möchte Art Studenten in einem Kurs mit Methode SortBy: wenn der Typ ist x i mit folgenden Regel werde sortieren (Students.Feedback.Count) * 5 + Student.NumberOfStars)

Wie?

War es hilfreich?

Lösung 2

Abfrage mit LINQ

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

Andere Tipps

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 ist eine HQL-Funktion. Finden Sie in der Kapitel "Ausdrücke" in der NH-Dokumentation.

Sie können auch sie wählen mit Kriterien und sortieren sie mit Linq.

Bearbeiten

Just saw, dass Sie es in einer Eigenschaft verwenden und können haben die Schüler bereits im Speicher. Sie haben nicht eine Abfrage benötigen, nur um es zu sortieren.

return students
  .OrderBy(x => x.Feedback.Count * 5 + x.NumberOfStars)
  .ToList();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top