NHibernate - запрашивать определенные столбцы и возвращать различные записи? - PullRequest
5 голосов
/ 04 августа 2011

Я новичок в NH.

У меня есть таблица в устаревшей БД, которая выглядит следующим образом:

Id,
CompanyId,
Description,
[LOADS of other columns here]

Я хотел бы вернуть набор данных DISTINCT, используя NHibernate, выбирая только определенные столбцы и используя оператор WHERE.,SQL выглядел бы примерно так:

SELECT DISTINCT
     [table_name].CompanyId, 
     [table_name].Description 
FROM 
     [table_name]
WHERE
     [table_name].CompanyId = 2

Погуглив это, я придумал:

ProjectionList projections = Projections.ProjectionList();
projections.Add(Projections.Property("CompanyId"), "CompanyId");
projections.Add(Projections.Property("Name"), "SomeName");


var companyDto = session.QueryOver<Company>()
    .Where(x => x.CompanyId == 2)
    .Select(projections)
    .TransformUsing(Transformers.AliasToBean<CompanyDto>())
    .List<CompanyDto>();

if (companyDto != null)
   Console.WriteLine(string.Format("{0}, {1}", companyDto.CompanyId, companyDto.SomeName));

Где DTO:

public class CompanyDto
{
  public int CompanyId { get; set; }
  public string SomeName { get; set; }
}

ИСущность:

public class Company
{
    public virtual int Id { get; private set; }
    public virtual int CompanyId { get; set; }
    public virtual string Name { get; set; }
}

Это не возвращает разрозненные записи.Я знаю, что обычно мне нужно использовать другое преобразование (DistinctRootEntity), но я не могу использовать два преобразования.Как я могу объединить все, что я хочу, в один звонок?Это должно быть возможно, его базовый SQL ....

Мне нужно:

  1. не использовать HQL
  2. не вернуть все столбцы для записи
  3. не возвращать повторяющиеся строки

1 Ответ

6 голосов
/ 04 августа 2011

есть проекция для этого

var projections = Projections.Distinct(Projections.ProjectionList()
    .Add(Projections.Property("CompanyId").As("CompanyId"))
    .Add(Projections.Property("Name").As("SomeName"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...