は、私は1つの列のみを含むテーブルを持っている:名前を。 4行は、それだけ ありますが、私は
var email = "[email protected]";
Table.Where(x => email.EndsWith(x.Name));
を照会した場合、私は空のリストを取得します
問題
| Name |
| test1.com |
| test2.com |
| test3.com |
| test4.com |
を言います。私が最初にすべての行を照会し、この
var email = "[email protected]";
Table.ToList().Where(x => email.EndsWith(x.Name));
のようにメモリにどこに計算すると、私はリストが正しいだけtest2.comが含まれ得るでしょう。
最初のクエリのために生成されたSQLは、私が交換しようとした
SELECT "Extent1"."Name" AS "Name"
FROM "USER"."Table" "Extent1"
WHERE ((NVL(INSTR(REVERSE(:p__linq__0), REVERSE("Extent1"."Name")), 0)) = 1)
です:p__linq__0「[email protected]」とのsqldeveloperでクエリを実行すると、結果は正しいです。
詳細情報
私はにEndsWith()を変更した場合は(入って)、問題が消えてしまいます。ここで
SELECT "Extent1"."Name" AS "Name"
FROM "USER"."Table" "Extent1"
WHERE ((NVL(INSTR(:p__linq__0, "Extent1"."Name"), 0)) > 0)
は)(のために生成されたSQLが含まれていますが、EndsWithまたはREVERSE方法と間違って何任意のアイデアを持っているのですか?
環境
- EF5.0
- .NET4.5
- Oracle11g
- この行は私に関係している3
データベースが(大文字と小文字を区別しない)CIに設定されていること(両方のシナリオのために)覚えているこれは、我々は常にSQLに直接IQueryablesを使用している場合、SQL EntityFrameworkが生成するチェックすべき理由として良い例です。なぜそれがSQLを生成するのか説明できません...しかし、私が生成するすべてのIQueryableで確認するのが一般的な方法になっています。 – Derek