Если не используется преобразователь результата, проекция приведет к списку анонимных объектов с прогнозируемыми значениями. Этого будет достаточно для привязки данных.
Для других целей вы хотите установить преобразователь результата, который будет создавать объекты известного типа. 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>();
В этих примерах класс Result не обязательно должен быть отображенным классом и должен иметь выбранные свойства.
partial class Result
{
public int Id { get; set; }
public string Username { get; set; }
}