Сортировка с математической формулой с nhibernate (C#)
-
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();
Не связан с StackOverflow