是否可以选择我想要从Session.CreateCriteria()返回的列?
错误:
var x = session.CreateCriteria();
x.CreateAlias("EmployeePosition", "employeePosition");
x.Add(Restrictions.Eq("employeePosition.Name", "Developer"));有没有办法添加像"select LastName“这样的东西来避免下载整个行。
发布于 2010-04-15 04:59:45
创建一个只具有您需要的属性的类,通常这是一个像{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>();发布于 2010-04-15 04:33:47
您可以使用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];
}也可以查看其他投影的NHibernate.Expressions名称空间。
发布于 2010-04-15 04:28:28
我建议尝试一下Linq to NHibernate。它会让你以一种非常自然的方式做你所要求的事情。
https://stackoverflow.com/questions/2640777
复制相似问题