2010-08-12 3 views
0

Disons que j'ai 4 classesen utilisant "In" restriction pour la collecte dans NHibernate

Student {int StudentID, chaîne StudentName, IList <BaseMarks> StudentMarks}

BaseMarks {bool GrandTotalMarks}

SpecializedMarks: BaseMarks {Résultats iList}

Résultat {grade string, bool Résultat}

Maintenant, j'ai une méthode Remplit étudiants liste collecte des marques IList et imbriquées mais typecasts en interne aux marques de la science . C'est à dire. chaque marque de base dans Student peut être cataloguée dans ScienceMarks pour obtenir des marques pratiques.

IList student_List = SomeMethodWhichRetursCollection();

QUESTION Comment puis-je filtrer les élèves ayant obtenu la note «A» dans l'une des matières?

quelque chose comme:

étudiants où ((SpecializedMarks) Students.StudentMarks) collection .Result. Toute la valeur de la propriété année = "A"

Répondre

0

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(); 
+0

Merci pour la réponse ... mais le problème est que l'étudiant contient une propriété de classe de base "BaseMarks" qui n'a pas de "Grades" donc s => s. ne donnera que GrandTotalMarks. Je dois typer les marques aux marques spécialisées. – helloworld

Questions connexes