在 NHibernate 中使用“In”限制进行收集

Posted

技术标签:

【中文标题】在 NHibernate 中使用“In”限制进行收集【英文标题】:using "In" restriction for collection in NHibernate 【发布时间】:2011-03-29 01:20:32 【问题描述】:

假设我有 4 节课

学生 int StudentId, string StudentName, IList StudentMarks

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

通过 nhibernate 对数据库查询进行单元测试

Nhibernate系列学习之 Criteria查询表达式增删改查

NHibernate 和共享网络托管

NHibernate 预选?

在控制器和存储库的上下文中很难使用 Nhibernate 会话