首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate查询CreateCriteria

NHibernate查询CreateCriteria
EN

Stack Overflow用户
提问于 2010-04-15 04:26:09
回答 4查看 7.8K关注 0票数 0

是否可以选择我想要从Session.CreateCriteria()返回的列?

错误:

代码语言:javascript
复制
var x = session.CreateCriteria();
    x.CreateAlias("EmployeePosition", "employeePosition");
    x.Add(Restrictions.Eq("employeePosition.Name", "Developer"));

有没有办法添加像"select LastName“这样的东西来避免下载整个行。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-15 04:59:45

创建一个只具有您需要的属性的类,通常这是一个像{Id,Label}这样的摘要类,您可以在需要简单类型的任何地方重用它,例如在清单中。使用ProjectionList定义要返回的列。然后使用Transformers.AliasToBean将结果转换为简单类型。

代码语言:javascript
复制
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>();
票数 3
EN

Stack Overflow用户

发布于 2010-04-15 04:33:47

您可以使用Projections来完成此操作:

代码语言:javascript
复制
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名称空间。

票数 2
EN

Stack Overflow用户

发布于 2010-04-15 04:28:28

我建议尝试一下Linq to NHibernate。它会让你以一种非常自然的方式做你所要求的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2640777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档