nHibernate中的简单表连接

时间:2016-03-15 01:52:00

标签: c# nhibernate

我刚接触nHibernate,并继承了一个实现它以访问其数据库的项目。到目前为止,我已经能够使用QueryOvery<>编写额外的单表查询方法,但我发现表连接背后的逻辑令人困惑。

我想实现以下T-SQL查询:

SELECT DISTINCT f.FILE_ID, f.COMPANY_ID, f.FILE_META_ID, (etc...)
FROM AUDIT.FILE_INSTANCE f
INNER JOIN AUDIT.FILE_INSTANCE_REPORTING_PERIOD p ON p.FILE_ID = f.FILE_ID
WHERE p.REPORTING_PERIOD_ID BETWEEN 20150101 AND 20151304
  AND FILE_STATUS != 'CANCELLED';

在此示例中,报告期间ID将是参数。请注意它们是整数,而不是日期,DISTINCT子句很重要。我该怎么办?

1 个答案:

答案 0 :(得分:0)

我不知道你的课程,但如果我会写它,它会是这样的:

var results = session.QueryOver<FileInstance>()
    .Where(fi => fi.Status == FileStatus.Canceled)
    .JoinQueryOver(fi => fi.ReportingPeriods)
        .WhereRestrictionOn(period => period.Id).Between(20150101, 20151304)
    .Transform(Transformers.DistinctRootEntity)
    .List();