【发布时间】:2012-04-23 12:01:57
【问题描述】:
遇到了一个问题,我希望上次导入数据以显示失败。我最终求助于 HQL,因为我必须执行两个查询,任何人都可以看到为什么这在 Linq to NHibernate 中不起作用(正确),这是 3.1 中的一个已知错误吗?
我要写的 sql。
select JobImport.* from
JobImportResult
inner join (
select Max(JobImportResultId) as JobImportResultId
from JobImportResult
group by JobImportId
)as tbl on tbl.JobImportResultId = JobImportResult.JobImportResultId
inner join JobImport on JobImport.JobImportId = JobImportResult.JobImportId
where ImportFailureReasonId is not null
我最终编写的 HQL。
select jir.JobImport from JobImportResult jir where jir.Id in
(select max(mjir.Id) from JobImportResult mjir group by mjir.JobImport)
and jir.ImportFailureReason is not null
有效的 Linq(但我认为在 2000 行之后会中断)
var innerQuery = Query<JobImportResult>()
.GroupBy(jir=>jir.JobImport)
.Select(jir=>jir.Max(jr=>jr.Id));
var innerQueryListed = innerQuery.ToList();
var resultQuery = Query<JobImportResult>()
.Where(jir => innerQueryListed.Contains(jir.Id) && jir.ImportFailureReason != null)
.Select(jir => jir.JobImport);
不起作用的 Linq :(
var innerQuery = Query<JobImportResult>()
.GroupBy(jir=>jir.JobImport)
.Select(jir=>jir.Max(jr=>jr.Id));
var resultQuery = Query<JobImportResult>()
.Where(jir => innerQuery.Contains(jir.Id) && jir.ImportFailureReason != null)
.Select(jir => jir.JobImport);
【问题讨论】:
-
当你说它在 2000 行后中断,错误是什么?
-
啊,我不知道,我知道包含的是性能上的恶魔,虽然呵呵:)
-
确实如此。我更喜欢我加入子查询的 SQL 查询,但据我所知,NH 目前不支持它:(
-
它确实支持连接,您需要使用连接和分组依据。类似这样:stackoverflow.com/questions/695506/…
标签: c# sql linq nhibernate linq-to-nhibernate