我是新来的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 ....
我需要:
答案 0 :(得分:6)
有一个预测
var projections = Projections.Distinct(Projections.ProjectionList()
.Add(Projections.Property("CompanyId").As("CompanyId"))
.Add(Projections.Property("Name").As("SomeName"));