用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;
}
}
我的课程课
我希望在方法中分类学生:如果类型为XI,则与以下规则(susidele.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