Entity Framework (6.1.3.) Генерирует операторы LIKE с ESCAPE '\' в случае, если у меня есть startwith, содержит et c. queuery. Только при использовании COUNT и соединении критериев с ИЛИ я получаю ORA-01425.
Все генерируется: Dev Express CriteriaOperator -> Microsoft ODataClient -> Сервер -> Entity Framework -> Oracle ManagedDataAccess.
Рекомендуется использовать .Trim (), чтобы вообще избежать ESCAPE. Однако все генерируется.
В случае, если мои критерии в предложении WHERE связаны с И все работает.
SELECT
"GroupBy1"."A1" AS "C1"
FROM ( SELECT
COUNT(1) AS "A1"
FROM (SELECT "Extent1"."PRIMARSCHLUSSEL" AS "PRIMARSCHLUSSEL1", ...
FROM "SCHEMATABLE"."SCHEMATABLE_WORKFLOW" "Extent1"
LEFT OUTER JOIN "SCHEMATABLE"."SCHEMATABLE_FFB" "Extent2" ON ("Extent1"."PRIMARSCHLUSSEL" = "Extent2"."PRIMARSCHLUSSEL") AND (("Extent2"."GELOSCHT" = :DynamicFilterParam_000001) )
WHERE ("Extent1"."GELOSCHT" <> 1) ) "Filter1"
LEFT OUTER JOIN "SCHEMATABLE"."SCHEMATABLE_FFB" "Extent3" ON (("Extent3"."GELOSCHT" = :DynamicFilterParam_000001) ) AND ("Filter1"."PRIMARSCHLUSSEL1" = "Extent3"."PRIMARSCHLUSSEL")
WHERE ((("Filter1"."GELOSCHT1" = :DynamicFilterParam_000001) ) AND ("Filter1"."ART" LIKE :p__linq__0 ESCAPE '\') AND ("Filter1"."GRUPPE" LIKE :p__linq__1 ESCAPE '\') AND ("Extent3"."EINKAUFER" LIKE :p__linq__2 ESCAPE '\'))
) "GroupBy1"
Если я изменяю его на ИЛИ, я получаю ORA-01425.
SELECT
"GroupBy1"."A1" AS "C1"
FROM ( SELECT
COUNT(1) AS "A1"
FROM (SELECT "Extent1"."PRIMARSCHLUSSEL" AS "PRIMARSCHLUSSEL1", ...
FROM "SCHEMATABLE"."SCHEMATABLE_WORKFLOW" "Extent1"
LEFT OUTER JOIN "SCHEMATABLE"."SCHEMATABLE_FFB" "Extent2" ON ("Extent1"."PRIMARSCHLUSSEL" = "Extent2"."PRIMARSCHLUSSEL") AND (("Extent2"."GELOSCHT" = :DynamicFilterParam_000001) )
WHERE ("Extent1"."GELOSCHT" <> 1) ) "Filter1"
LEFT OUTER JOIN "SCHEMATABLE"."SCHEMATABLE_FFB" "Extent3" ON (("Extent3"."GELOSCHT" = :DynamicFilterParam_000001) ) AND ("Filter1"."PRIMARSCHLUSSEL1" = "Extent3"."PRIMARSCHLUSSEL")
WHERE ((("Filter1"."GELOSCHT1" = :DynamicFilterParam_000001) ) AND (("Filter1"."ART" LIKE :p__linq__0 ESCAPE '\') OR ("Filter1"."GRUPPE" LIKE :p__linq__1 ESCAPE '\') OR ("Extent3"."EINKAUFER" LIKE :p__linq__2 ESCAPE '\')))
) "GroupBy1"
-- DynamicFilterParam_000001: '0' (Type = Decimal, IsNullable = false)
-- DynamicFilterParam_000002: 'null' (Type = Decimal)
-- p__linq__0: 'T%' (Type = Object)
-- p__linq__1: 'K%' (Type = Object)
-- p__linq__2: '%e%' (Type = Object)
Кстати, это утверждение работает и для меня:
SELECT COUNT(1) FROM FFB WHERE ((geloscht = 0) AND ((ART LIKE 'T%' ESCAPE '\') OR (GRUPPE LIKE 'K%' ESCAPE '\') OR (EINKAUFER LIKE '%e%' ESCAPE '\')));