Question

Est-il possible de choisir les colonnes que je veux en retour session.createCriteria ()?

EGZ.

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

et est-il un moyen d'ajouter quelque chose comme « select LastName » pour éviter de télécharger toute la ligne.

Était-ce utile?

La solution

faire une classe qui n'a que les propriétés dont vous avez besoin, souvent, c'est une classe de synthèse comme {Id, étiquette} et vous feriez le réutiliser partout où vous avez besoin d'un type simple, dans une liste par exemple. Utilisez ProjectionList pour définir les colonnes pour revenir. Ensuite, utilisez Transformers.AliasToBean pour transformer le résultat à votre type 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>();

Autres conseils

Vous pouvez le faire en utilisant les projections:

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];
  }

Vérifiez l'espace de noms NHibernate.Expressions pour d'autres projections ainsi.

Je suggère de donner à NHibernate Linq un essai. Il vous permettra de faire ce que vous demandez d'une manière très naturelle.

scroll top