在一个实体假设有属性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; }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top