プロジェクトを DevArt のバージョン 7.2.114 に更新した後、TOAD で直接実行すると、生成された SQL が結果を返すにもかかわらず、一部のクエリが結果を返さないことに気付きました。バージョン 7.0.25 に戻すと、すべて正常に動作します。
私のデータベースの顧客テーブルは次のようになります。
SomeField | Firstname | CustomerNo
(null) | John | 12345
12345 | John | 12345
828282 | Mark | 12346
私のクエリは次のようになります。
var firstNameToSearch = "John";
var someFieldToSearch = null;
var result = from customer in context.Customers
join someTable in context.SomeTables on customer.CustomerNo equals "12345"
where someTable.SomeCondition && (someTable.SomeField == someFieldToSearch || someFieldToSearch == null) && (customer.Firstname == firstNameToSearch || firstNameToSearch == null)
ここで、EF クエリを実行すると、まったく例外なく 0 レコードになります。しかし、SQL コマンドを実行すると、2 つのレコードが作成されます。
2行目のコードを次のように変更すると:
var someFieldToSearch = string.Empty;
正しい結果が返されます。
このコードを指しているいくつかのヒントを見つけました:
Devart.Data.Oracle.Entity.OracleEntityProviderServices.HandleNullStringsAsEmptyStrings = true;
しかし、それは効果がありません。