2009-07-02 21 views
14

¿Cómo se puede obtener una sola columna de una consulta en lugar de un objeto completo?Obtener una sola columna de una entidad

que podía hacer algo como esto para conseguir el objeto entero, pero lo único que quiero es los nombres:

IList<Tribble> tribbles = session.CreateCriteria(typeof(Tribble)).List<Tribble>(); 
IList<string> names = new List<string>(); 
foreach (Tribble t in tribbles) { 
    names.Add(t.Name); 
} 

Me gustaría ser capaz de especificar criterios adicionales, por lo que es posible simplemente excluir cierta columnas de ser recuperadas?

Respuesta

23

Aquí está la solución que finalmente terminó usando:

ICriteria c = session.CreateCriteria(typeof(Tribble)); 
c.SetProjection(Projections.ProjectionList().Add(Projections.Property("Name"))); 
IList<string> names = c.List<string>(); 

que tiene esta idea de this old StackOverflow question.

-2

Normalmente no lo hace. Rara vez tiene sentido tener un objeto comercial parcialmente poblado.

¿Por qué querrías hacer esto?

+0

lo estoy usando lo largo de todo el programa con docenas de clases, esta es la única vez que he necesario para hacer esto y es necesario en esta circunstancia. –

+0

¿Puede explicarnos más a fondo cuál es el caso de uso? –

+0

¿Esto no sucede todo el tiempo? Por ejemplo, quiero mostrar los detalles de un empleado más el nombre de su oficina. No necesito toda la oficina, solo el nombre. – cbp

2

¿Qué ocurre al ejecutar una consulta por cadena?

IList<string> names = session.CreateQuery("select name from Tribbles").List<string>(); 
+1

Técnicamente, en realidad tendría que hacer esto: IList names = session.CreateQuery ("seleccionar t.name de Tribbles t"). List (); –

2

se puede hacer algo como esto:

IQuery query = dao.GetQuery(@"SELECT u.Id 
           FROM UserImpl u 
           WHERE u.UserName = :username"); 
       query.SetParameter("username", username); 
return (long)query.UniqueResult(); 
7

Casi cinco años después ..., esto es lo que podría hacer uso de NHibernate.Linq:

IList<string> names = session.Query<Tribble>().Select(t => t.Name).ToList() 
Cuestiones relacionadas