在 NHibernate 中使用“In”限制进行收集
Posted
技术标签:
【中文标题】在 NHibernate 中使用“In”限制进行收集【英文标题】:using "In" restriction for collection in NHibernate 【发布时间】:2011-03-29 01:20:32 【问题描述】:假设我有 4 节课
学生 int StudentId, string StudentName, IList
BaseMarks bool GrandTotalMarks
SpecializedMarks:BaseMarks Ilist 结果
结果 字符串等级,布尔结果
现在, 我有一种方法可以填充学生列表 IList 和嵌套标记集合,但在内部将其类型转换为科学标记。 IE。 Student 中的每个basemark 都可以转换为ScienceMarks 以获得实用的marks 属性值。
IList student_List = SomeMethodWhichRetursCollection();
问题 如何筛选在任何科目中获得“A”成绩的学生。
类似:
Students where ((SpecializedMarks)Students.StudentMarks).Result 集合。任何 Grade 属性的值 = "A"
【问题讨论】:
【参考方案1】:HQL: The Hibernate Query Language
LINQ for NHibernate
// using HQL
var students = Session.CreateQuery("from Students s where s.Grades = :grade")
.SetParameter("grade","A")
.List<Student>();
// using NHibernate.Linq
var students = Session.Linq<Student>().Where(s => s.Grades == "A").ToList();
// or something more complex
var students = Session.Linq<Student>()
.Where(s => s.Grades.Where(x => x.Score == "A"))
.ToList();
【讨论】:
感谢您的回复...但问题是学生包含一个基类属性“BaseMarks”,它没有“Grades”因此 s=>s。只会给出 GrandTotalMarks。我需要将标记转换为专业标记。以上是关于在 NHibernate 中使用“In”限制进行收集的主要内容,如果未能解决你的问题,请参考以下文章
NHibernate 使用带有 WHERE IN 的 QueryOver