我在创建 Linq to Entities (Oracle 11g) 请求时遇到问题。这是我有一个三列的表 TREATMENT(简化版):ID、STATE 和 APPLICATION。这是一个示例:
ID STATE APPLICATION
1 A MAJ
2 A FLUX
3 A FLUX
4 R REF
5 A REF
现在,我的目标是使用这些规则检索数据:
- 状态必须是 A(添加)
- 每个应用程序的行数低于最大值
- 最大值由 State = R 的行数次要(每个应用程序)
示例:如果最大值为 1,我必须检索第 1 行和第 2 行。(无法检索第 5 行,因为已经存在状态为 R 的 REF(第 4 行))
当 R 的数量等于或大于最大值时,我设法检索所有行,但我不知道如何限制我的结果数量以尊重最大值。
这是请求:
using (Entities bdd = new Entities())
{
var treatments = from trt in bdd.TREATMENT
let app = from t in bdd.TREATMENT
where t.STATE == "R"
group t by t.APPLICATION into grouped
where grouped.Count() >= maxPerApplication
select grouped.Key
where trt.STATE == "A" && !app.Contains(trt.APPLICATION)
orderby trt.ID
select new TreatmentDto()
{
Id = trt.ID
};
result = treatments.ToList();
}
在 SQL 中,我会使用内部请求和 ROWNUM 来限制结果的数量,但我不知道该怎么做。我看到的唯一解决方案是分两部分进行请求,但我想避免这种情况以保持信息的一致性。