Вопрос

Можно ли выбрать, какие столбцы я хочу в обратной связи с Session.createcriteria ()?

ЭГЗ.:

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

И есть ли способ добавить что-то вроде «Выбрать фамилия», чтобы не загрузить всю строку.

Это было полезно?

Решение

Сделайте класс, который имеет только необходимые свойства, часто это является сводным классом, например, {ID, Label}, и вы повторно используете его где угодно, например, простой тип в списке. Используйте проекционный список, чтобы определить, какие столбцы возвращаются. Затем используйте Transformers.aliastobean, чтобы преобразовать результат к вашему простому типу.

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>();

Другие советы

Вы можете сделать это, используя прогнозы:

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

Проверьте пространство имен Nhibernate.expressions для других прогнозов.

Я бы предложил дать Linq для Nibernate попробую. Это позволит вам делать то, что вы спрашиваете очень естественным образом.

Чтобы добавить в Дана Ответ, если у вас есть фактический класс, в котором вы хотите прочитать его, вы также можете использовать трансформаторы. Затем NHIBERNATE будет пытаться заполнить свойства объекта со значениями из соответствующих имен полей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top