NHibernate的预测
-
18-09-2019 - |
题
在一个实体假设有属性ID,用户名,年龄,地址等。现在我只想ID和用户名和我使用此代码吧。
预测使比从查询实体的列表以外的内容的返回。
var proj = Projections.ProjectionList()
.Add(Projections.Property("Id"), "Id")
.Add(Projections.Property("Username"), "Username");
var list2 = DetachedCriteria.For<User>()
.Add(Expression.Eq("Username", "lachlan"))
.GetExecutableCriteria( sessionFactory.GetCurrentSession())
.SetProjection( proj )
.List();
我将如何检索值。在其中对象将这些值作出。
解决方案
除非使用结果变压器,投影将导致与投影值的匿名对象的列表。这将是足够的数据绑定。
有关其他用途,想要的结果集变压器,其将创建一个已知类型的对象。该AliasToBeanTransformer
将创建所指定的类型的每一行的目的,并设置其属性的行值。
如果你知道结果的类型,可以使用通用的方法List<T>()
var proj = Projections.ProjectionList()
.Add(Projections.Property("Id"), "Id")
.Add(Projections.Property("Username"), "Username");
var list2 = DetachedCriteria.For<User>()
.Add(Expression.Eq("Username", "lachlan"))
.GetExecutableCriteria( sessionFactory.GetCurrentSession())
.SetProjection( proj )
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
结果变压器也可以在SQL和HQL查询中使用。
list2 = Session.CreateSQLQuery("select Id, Username from user_table")
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
list2 = Session.CreateQuery("select Id, Username from User")
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
在这些实施例中的结果类并不需要是一个映射类,并且必须具有所选择的性质。
partial class Result
{
public int Id { get; set; }
public string Username { get; set; }
}
不隶属于 StackOverflow