NHibernate - 查询特定列并返回不同的记录?

Mac*_*rus 6 nhibernate

我是新来的NH.

我在遗留数据库中有一个表,如下所示:

Id,
CompanyId,
Description,
[LOADS of other columns here]
Run Code Online (Sandbox Code Playgroud)

我想使用NHibernate返回一个DISTINCT数据集,只选择特定的列并使用WHERE语句.SQL看起来像这样:

SELECT DISTINCT
     [table_name].CompanyId, 
     [table_name].Description 
FROM 
     [table_name]
WHERE
     [table_name].CompanyId = 2
Run Code Online (Sandbox Code Playgroud)

谷歌搜索了这个我想出来:

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));
Run Code Online (Sandbox Code Playgroud)

DTO的地方是:

public class CompanyDto
{
  public int CompanyId { get; set; }
  public string SomeName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

实体是:

public class Company
{
    public virtual int Id { get; private set; }
    public virtual int CompanyId { get; set; }
    public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这不会带回消息记录.我知道通常我必须使用不同的变换(DistinctRootEntity),但我不能使用两个变换.如何将所有我想要的东西组合成一个电话?它必须是可能的,它的基本SQL ....

我需要:

  1. 不要使用HQL
  2. 没有带回所有列的记录
  3. 不带回重复的行

Fir*_*iro 6

有一个预测

var projections = Projections.Distinct(Projections.ProjectionList()
    .Add(Projections.Property("CompanyId").As("CompanyId"))
    .Add(Projections.Property("Name").As("SomeName"));
Run Code Online (Sandbox Code Playgroud)