私は EF5 の経験があまりなく、私の DBA は非常に複雑なクエリを生成するだけで、ツールの選択は非常に限られていました。問題を説明します。データベースは正規化されていないため、このようなクエリが必要になります。そして、その構造とクエリに影響を与えることはできませんたとえば、クエリがあります:
SELECT A.my_id,
A.field_1,
A.field_2,
A.field_3,
A.field_4,
A.field_5,
A.field_6,
A.field_7,
A.field_8,
A.field_9,
B.field_10,
C.field_11,
C.field_12,
C.field_13,
C.field_14,
D.field_15,
E.my_id2,
E.field_16,
E.field_17,
E.field_18,
G.field_19
etc...
FROM tbl1 A,
tbl2 B, tbl3 C, tbl4 D, tbl5 E, tbl6 F, tbl7 G
WHERE A.my_id = B.my_id
AND A.my_id = C.my_id
AND A.my_id = D.my_id
AND A.my_id = E.my_id
AND E.my_id3 = F.my_id3
AND E.my_id4 = G.my_id4
AND E.my_id2 = <value from code>
AND F.param1 = <value from code>
AND B.param4 = 'KEY1'
AND B.param5 = 'KEY2'
AND E.param8 > 0
AND E.param9 = 'KEY3'
AND E.param10 <> 'KEY4'
AND G.param11 = 'KEY5'
AND G.param12 <= <SYSTEM DATETIME>
AND G.param13 >= <SYSTEM DATETIME>
AND A.param2 <= <SYSTEM DATETIME>
AND A.param3 >= <SYSTEM DATETIME>
AND B.param6 <= <SYSTEM DATETIME>
AND B.param7 >= <SYSTEM DATETIME>`
次に、Entity Framework 5 を使用してコード内のクエリを移動するときに発生した問題について説明します。
メインテーブルにINNER JOINします。このような。
ObjectContext.CreateQuery<ETbl5>(entityName).
.Where(E =>
E.param2 >= SqlFunctions.GetDate() && E.param3 <= SqlFunctions.GetDate() &&
E.param8 > 0 && E.param9 == "KEY3" &&
E.param10 != "KEY4" && E.my_id2 == <value from code>
)
.Join((Context as MyDbContext).ETbl7 ,
E => new { A.my_id4},
G => new { B.my_id4},
(E, G) => E
)
JOIN as の条件を追加するにはどうすればよいAND G.param12 <= <SYSTEM DATETIME>
ですか? 匿名型にそのような条件を追加するにはどうすればよいですか?
私はいつも多くの問題を抱えており、間違った方向に進んでいると思います。おそらく、問題を解決することに加えて、そのようなクエリを処理するための正しい戦略を教えてください. ストアド プロシージャに転送できることは理解していますが、IQuerable がページネーションを使用して Grid で使用できる結果が必要です。ご清聴ありがとうございました。