Запрос NHibernate CreateCriteria - PullRequest
       9

Запрос NHibernate CreateCriteria

0 голосов
/ 15 апреля 2010

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

egz:.

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

и есть ли способ добавить что-то вроде "select LastName", чтобы избежать загрузки всей строки.

Ответы [ 4 ]

3 голосов
/ 15 апреля 2010

создайте класс, который имеет только нужные вам свойства, часто это сводный класс, такой как {Id, Label}, и вы можете использовать его везде, где вам нужен простой тип, например, в листинге. Используйте ProjectionList, чтобы определить, какие столбцы возвращать. Затем используйте 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>();
2 голосов
/ 15 апреля 2010

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

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 и для других проекций.

1 голос
/ 15 апреля 2010

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

0 голосов
/ 15 апреля 2010

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

...