2017-04-05 21 views
0

基本的には、データが別のテーブルに存在するかどうかを確認する必要があるクエリがあります。Entity Framework 4 Any()

bool isInUse; 
IsInUse = entity.H83SAF_HEALTH_PLAN.H83SAF_CONSENT.Any(); 

私は何が起こっていたか確認するためにトラップにクエリをクラッチを使用した場合、私は、クエリは次のように基本的に動作して見ることができる:

SELECT 
"Extent1"."ACTIVE" AS "ACTIVE", 
"Extent1"."IS_COMPLETE" AS "IS_COMPLETE", 
"Extent1"."DATE_CREATED" AS "DATE_CREATED", 
"Extent1"."DATE_MODIFIED" AS "DATE_MODIFIED", 
"Extent1"."CREATED_BY" AS "CREATED_BY", 
"Extent1"."MODIFIED_BY" AS "MODIFIED_BY" 
    ...more columns..natter, natter.. 
FROM "H83FTF"."H83SAF_CONSENT" "Extent1" 
WHERE ("Extent1"."HEALTH_PLAN_ID" = 1) 

クエリ自体は結構です。 .Any()ステートメントに問題があります。私が考えたのは、.Any()の条件が満たされたときにクエリが突然終了するということです。

しかし、クエリを実行すると、クエリが18,000レコード(使用していない)を戻しているように見えます。条件が満たされていれば、データが他のテーブルに存在するかどうかを確認するだけです。そのまま、18,000行が.Any()ステートメントで実行されている間、クエリはWebサイトをハングアップします。

最初の行は条件が満たされていますが、私の理解では、.Any()は条件が満たされた瞬間を終了または停止する必要があります。

私は(firstordefaultしようとした)、まだそれはまだメモリに18000行をフェッチ...

+0

'Any()'に条件がありません。いずれにしても(申し訳ありません)、Where()句を使用しないのはなぜですか? –

+0

lol - 私は試みました:.Any(x => x.HEALTH_PLAN_ID = 1)は、18000レコードをやっているところでまだその遅れを持っていました。 – dawriter

+0

'Where(x => x.HEALTH_PLAN_ID == 1).Take(1)'を使ってlength/countをチェックしてください。理論的には、それはクエリがSELECT TOP 1を実行する必要があります。これはEFに1レコードしか返しません。 –

答えて

0

が最後に結論に達しましたがEF 5.0に.ANY()を使用してOracle 11gの中に存在して翻訳していないということです - ソリューション直接電話をして、はいかいいえを返すことでした。

関連する問題