NHibernate的查询个createCriteria
-
27-09-2019 - |
题
是否有可能从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的将尝试与来自匹配字段名值来填充对象的属性。
不隶属于 StackOverflow