Sortieren mit Mathematische Formel mit nHibernate (C #)
-
10-10-2019 - |
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?
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