2

わかりました、私は支援を求める前にしばらくこれに取り組んできました。要求されたデータを配信するために互いに続く4つのOracleベースのSQLクエリがあります。私は .NET で作業していますが、LINQ to DataSet を使用して最初のクエリを 2 番目のクエリに渡し、それが 3 番目に渡され、最後に 4 番目に渡されると思います。私が頭を悩ませているのは、最初から2番目に渡すときです。通常の ODP.NET および C# クエリを使用して、最初のクエリを DataSet に取得できます。

ステップ2はこちら

SELECT eid,
num_1,
MIN(cdts) keep (dense_rank FIRST ORDER BY eid) first_creation,
cpers,
curent,
ag_id,
beat,
group_priority,
disp_date,
MIN(disp_time) keep (dense_rank FIRST ORDER BY eid) first_call,
curent_16,
MIN(ad_sec) keep (dense_rank FIRST ORDER BY eid) first_entry,
MIN(ds_sec) keep (dense_rank FIRST ORDER BY eid) first_dispatched,
MIN(ar_sec) keep (dense_rank FIRST ORDER BY eid) first_arrival,
MIN(csec) keep (dense_rank FIRST ORDER BY unid) fastest_unit,
MIN(hold_sec) keep (dense_rank FIRST ORDER BY eid) fastest_dispatch,
MIN(drive_sec) keep (dense_rank FIRST ORDER BY unid) fastest_enroute,
MIN(resp_sec) keep (dense_rank FIRST ORDER BY unid) fastest_arrival,
unid FROM JC5A_STEP1 GROUP BY eid,
num_1,
cpers,
curent,
ag_id,
beat,
group_priority,
disp_date,
curent_16,
unid HAVING cpers <> 0 AND curent = 'T' AND curent_16 ='T' ORDER BY eid;

これを独自の DataSet に取り込む LINQ to DataSet を作成しようとしています。これは私がこれまでに持っているものであり、私は道から外れていることを知っています

var query2 = (from row in query1.AsEnumerable() where row.Field<int32>("cpers") != 0 && row.Field<string>("curent") == "T" && row.Field<string>("curent_16") == "T" order by row.Field<Int32>("eid") select new { eid = row.Field<Int32>("eid"), ... }).Min(x => x.cdts); 

min 以外のすべてのフィールドと、簡潔にするために含まれているフィールドは省略しました。それで、私の質問は、SELECT ステートメントに含まれるものを含む LINQ to DataSet クエリを作成できるかということです。そうでない場合、これらすべてを PL/SQL 関数で開発し、アプリケーションからストアド プロシージャとして呼び出す必要がありますか?

ご協力いただきありがとうございます。

T.

迅速なフィードバックに基づいて、最初のクエリは次のとおりです。

select a.eid, a.num_1, e.cdts, e.cpers, a.curent, a.tycod, a.ag_id, a.lev3 as beat, case when a.priority < '2' then 'high' when a.priority > '2' then 'low' else 'normal' end as group_priority, substr(e.cdts,5,2)||'/'||substr(e.cdts,7,2)||'/'||substr(e.cdts,1,4) as disp_date, substr(e.cdts,9,6) as disp_time, e.curent AS curent_16, a.ad_sec, a.ds_sec, a.ar_sec, u.csec, a.ds_sec - a.ad_sec as hold_sec, u.csec - a.ds_sec as drive_sec, u.csec - a.ad_sec as resp_sec, a.priority, u.unid from un_hi u join (aeven a join event e on a.eid = e.eid) on u.eid = a.eid where e.cdts between '20110101' and '20110201' and a.tycod not in ('ANIMAL', 'BUSINESS', 'CARCHECK', 'CARSTAT', 'CIVSERV', 'CKLIGHTS', 'COURT', 'ERRAND', 'FOLLOW', 'FOOTPURS', 'GREATMAL', 'HOUSE', 'INFO', 'K9', 'PEDCHECK', 'PRISONER', 'RESIDENC', 'SELF', 'SPECIAL', 'STATION', 'TELEPHON', 'TRAFFIC', 'TRASH', 'WARRANT', 'WEATHER') and u.unit_status = 'AR' and a.ag_id = 'JCSO' and a.lev3 = 'JC5' and a.ar_sec is not null and a.ds_sec is not null and a.ds_sec - a.ad_sec between 1 and 7200 and a.ar_sec - a.ds_sec between 1 and 18000 and a.ar_sec - a.ad_sec between 1 and 18000 and u.csec - a.ds_sec > 1 and u.csec - a.ad_sec > 2 order by e.cpers, a.eid, u.csec;
4

1 に答える 1

0

データセットへのlinqの代わりに、問題に対してlinqtosqlを使用することを検討します。SQLでクエリを作成する代わりに、c#を直接使用してクエリを作成できます。これにより、DataSetやその仲間を扱う際の制限や頭痛の種なしに、より多くのオプション(カスタムオブジェクト)を利用できます。

于 2011-05-04T03:15:15.387 に答える