Сортировка с математической формулой с nhibernate (C#)

StackOverflow https://stackoverflow.com/questions/4682077

  •  10-10-2019
  •  | 
  •  

Вопрос

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

Мой класс обратной связи.

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

Мой ученик класс

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

}

Мой курс

Я хочу сортировки студентов на курсе с методом Sortby: если тип is is xi будет сортировать с следующим правилом (Student.feedback.count)*5 + Student.numberofstars)

Как ?

Это было полезно?

Решение 2

Запрос с Linq

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

Другие советы

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 это функция HQL. Увидеть Глава "выражения" В документации NH.

Вы также можете выбрать его с критериями и сортировать его с помощью LINQ.

Редактировать

Только что увидел, что вы используете его в собственности, и вы май У меня уже есть студенты в памяти. Вам не нужен запрос, просто чтобы сортировать его.

return students
  .OrderBy(x => x.Feedback.Count * 5 + x.NumberOfStars)
  .ToList();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top