2013-04-18 4 views
0

J'ai deux tables: Parent et Child qui ont la relation suivante: Parent a beaucoup de Childs.NHibernate: comment sélectionner un parent/enfant trié et récupérer uniquement des numéros de ligne spécifiques

public class Parent 
{ 
    public DateTime Timestamp; 
    public IList<Child> Child; 
} 
public Child 
{ 
    public string Name; 
} 

Je veux sélectionner les deux parents et enfants, classés par Horodatage et obtenir uniquement les lignes entre l'indice x à y.

public IList<Parent> Get(DateTime from, DateTime to, int startRow, int count) 
{ 
    QueryOver<Parent>().Where(row => row.Timestamp >= from) 
    .And(row => row.Timestamp <= to).OrderBy(row => row.Timestamp).Asc.List(); 
} 

Je ne sais pas comment obtenir uniquement les lignes requises.

Devrais-je le faire avec QueryOver? ou c'est mieux de le faire en HQL?

Merci

+0

Etes-vous en train de dire que vous voulez qu'EAGER charge les enfants avec leurs parents? – Rippo

+0

Oui et je veux aussi filtrer le résultat pour récupérer seulement la gamme de lignes – Haimon

+1

Quand vous dites "range of rows" voulez-vous dire tous les parents entre les lignes x et y, c'est à dire quelque chose comme 'select * de Parents où RowNum entre: x : y'? – mickfold

Répondre

0

j'ai changé la relation et au lieu d'avoir des parents et des enfants, j'utiliser une seule table:

public class Info 
{ 
    public DateTime Timestamp; 
    public string Name; 
} 

Afin d'obtenir tous les enregistrements entre les dates, triées et les obtenir de l'indice startRow à startRow cOUNT j'ai utilisé les éléments suivants:

public IList<Info> GetInfo (DateTime fromDate, DateTime toDate, int startRow, int count) 
{ 
    IList<Info> result = 
    QueryOver<Info>() 
    .Where(row => row.Timestamp >= fromDate) 
    .And(row => row.Timestamp <= toDate) 
    .OrderBy(row => row.Timestamp).Asc 
    .Skip(startRow).Take(count).List(); 
    return result; 
} 

le SQL est résulté:

SELECT * FROM Info WHERE timestamp >= :fromDate AND timestamp <= :toDate 
ORDER BY timestamp ASC OFFSET :startRow ROWS FETCH NEXT :count ROWS ONLY 
Questions connexes