是否有可能从Session.CreateCriteria()?

选择了我想要的东西列在回归

egz:

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

和有没有办法来添加类似“选择姓氏”,以避免下载整行。

有帮助吗?

解决方案

让一个只有你所需要的属性的类,通常这是像{ID,标签}摘要类,你要重用任何你需要一个简单的类型,在例如上市。使用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>();

其他提示

您可以做到这一点使用预测:

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到NHibernate的一个尝试。它可以让你做你问一个非常自然的方式是什么。

要添加到达纳的答案,如果你有一个实际的类要在读它,你也可以使用Transformers.AliasToBean与投影。然后NHibernate的将尝试与来自匹配字段名值来填充对象的属性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top