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

时间:2011-08-04 14:35:29

标签: nhibernate

我是新来的NH。

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

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

我想使用NHibernate返回一个DISTINCT数据集,只选择特定的列并使用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 个答案:

答案 0 :(得分:6)

有一个预测

var projections = Projections.Distinct(Projections.ProjectionList()
    .Add(Projections.Property("CompanyId").As("CompanyId"))
    .Add(Projections.Property("Name").As("SomeName"));