Pregunta

¿Es posible elegir qué columnas que quiero a cambio de session.createCriteria ()?

EGZ:.

var x = session.CreateCriteria();
    x.CreateAlias("EmployeePosition", "employeePosition");
    x.Add(Restrictions.Eq("employeePosition.Name", "Developer"));

y hay una manera de añadir algo así como "seleccione Apellido" para evitar la descarga de toda la fila.

¿Fue útil?

Solución

crea una clase que tiene sólo las propiedades que necesita, a menudo se trata de una clase de resumen como {Id, Etiqueta} y que había reutilizar en cualquier lugar que necesita un tipo simple, en una lista, por ejemplo. Utilice ProjectionList para definir qué columnas para volver. A continuación, utilice Transformers.AliasToBean para transformar el resultado a su tipo simple.

ProjectionList projectionList = Projections.ProjectionList();
projectionList.Add(Projections.Property("EmployeeID"), "Id");
projectionList.Add(Projections.Property("EmployeePosition"), "Label");
var x = DetachedCriteria.For(Employee);
x.SetProjection(projectionList);
x.SetResultTransformer(Transformers.AliasToBean(SimpleType)));
return x.GetExecutableCriteria(UnitOfWork.CurrentSession).List<SimpleType>();

Otros consejos

Se puede hacer esto utilizando proyecciones:

IList<Object[]> list = session.CreateCriteria(typeof(Employee))
  .SetProjection(Projections.ProjectionList()
    .Add(Projections.Property("FirstName"))
    .Add(Projections.Property("LastName"))
  ).List<Object[]>();

  foreach( Object[] person in list )
  {
    String firstName = person[0];
    String lastName = person[1];
  }

Confirmar el espacio de nombres NHibernate.Expressions para otras proyecciones también.

Yo sugeriría dando LINQ to NHibernate intentarlo. Se le permitirá hacer lo que piden de una manera muy natural.

scroll top