Belius' Blog

Il blog di Simone Belia
posts - 16, comments - 335, trackbacks - 31

martedì 16 ottobre 2007

[UPDATE] NHibernate complex queries

Pochi giorni fa avevo scritto un post  su come creare degli oggetti che incapsulassero le informazioni per filtrare dei dati in NH (e non solo).

Questo post non è altro che una piccolissima aggiunta con l'implementazione di una classe che rappresenta l'ordine dei risultati della query.

Il concetto è quello di avere una classe che contenga il campo da ordinare e la direzione di ordinamento (espressa tramite un enum).

public class OrderField
{
     
private string _field = string.Empty;
     private 
OrderDirection _direction OrderDirection.Asc;

     public string 
Field
     {
         
get return _field}
         
set { _field = value; }
     }

     
public OrderDirection Direction
     {
         
get return _direction}
         
set { _direction = value; }
     }

     
public OrderField(string field, OrderDirection direction)
     {
         _field 
field;
         
_direction direction;
     
}
}

 

public enum OrderDirection
{
      Asc,
      Desc
}
 
Visto che potrebbero verificarsi numerosi casi in cui un solo campo non basta ai fini dell'ordinamento, ho pensato fosse utile implementare una collezione che dasse la possibilità di recuperare in un colpo tutta la stringa di ordinamento.

 

public class OrderFieldList: List<OrderField>
{
      
public override string ToString()
      {
          StringBuilder sb 
= new StringBuilder("");
          if 
(this.Count >0)
          {
              sb.Append(
"ORDER BY ");
              foreach 
(OrderField of in this)
              {
                  sb.AppendFormat(
"{0} {1},", of.Field, of.Direction.ToString());
              
}

              sb.Remove(sb.Length-
11);
          
}

          
return sb.ToString();
     
}
}
 
 
 ...e per finire la sua implementazione ai fini pratici è:
 
string hql "select c from Customer c where c.Country = :country"

                
OrderFieldList ofl = new OrderFieldList();
ofl.Add(new OrderField("BirthDate", OrderDirection.Desc));
ofl.Add(new OrderField("LastName", OrderDirection.Asc));

hql +ofl.ToString();

//..........
//..........
//..........
....a presto!!!

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (53) | Filed Under [ ASP.NET Tips ]

Powered by:
Powered By Subtext Powered By ASP.NET