Linq to Entities(Oracle 11g)リクエストの作成に問題があります。これが、ID、STATE、およびAPPLICATIONの3つの列(簡略化されたバージョン)のテーブルTREATMENTです。ここにサンプルがあります:
ID STATE APPLICATION
1 A MAJ
2 A FLUX
3 A FLUX
4 R REF
5 A REF
今、私の目的は、これらのルールを使用してデータを取得することです。
- 状態はA(追加)である必要があります
- 最大値を下回るアプリケーションあたりの行数
- 最大値はマイナー化されますb状態=Rの行数(アプリケーションごと)
例:最大値が1の場合、行1と2を取得する必要があります(状態R(行4)のREFが既に存在するため、行5を取得できません)
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を使用して結果の数を制限しますが、その方法がわかりません。私が見る唯一の解決策は、2つの部分でリクエストを実行することですが、情報の一貫性を維持するために、これを避けたいと思います。