c# - 获取最大行(Linq、NHibernate)

标签 c# sql linq nhibernate linq-to-nhibernate

遇到一个问题,我希望上次导入数据时显示失败。我最终求助于 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);

最佳答案

您使用的是.NET 4吗?如果是这样,请尝试以下操作:

var innerQuery = Query<JobImportResult>()
    .GroupBy(jir=>jir.JobImport)
    .Select(jir=>jir.Max(jr=>jr.Id))
    .ToList();

var resultQuery = Query<JobImportResult>()
    .Where(jir => innerQuery.Any(j => j == jir.Id)
        && jir.ImportFailureReason != null)
    .Select(jir => jir.JobImport)
    .ToList(); //only use this if you want to resolve the query

或者 .NET 3.5 将 resultQuery 部分更改为:

var resultQuery = Query<JobImportResult>()
    .Where(jir => innerQuery.Count(j => j == jir.Id) > 0
        && jir.ImportFailureReason != null)
    .Select(jir => jir.JobImport)
    .ToList(); //only use this if you want to resolve the query

关于c# - 获取最大行(Linq、NHibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10101590/

相关文章:

c# - WPF:如何在 DockPanel 中拉伸(stretch)中间的 child ?

sql - 不能在相关列上使用 where 子句

mysql - 创建一个用户并且不授予任何权限

c# - 帮助将 SQL 转换为 LINQ-to-Entities

sql - 在使用 PredicateBuilder 方面需要帮助

c# - 在 try catch block 中循环

c# - 将 Batch shell 脚本输出读入 C# .Net 程序

php - 当前 SELECT 的 SQL 更新

c# - 如何将查找作为 2 个旧查找的联合?

c# - 混合预计算和延迟加载