/ / porównywanie „string” i „null” w linq z bytem - oracle, linq, byt-framework-4

porównywanie "string" i "null" w linq do entity - oracle, linq, entity-framework-4

Mój kod:

string name;
db.Entities.Where(m=>m.name==(name??m.name))
throw:Should be CHAR, but get NCLOB.

// ----------------

  decimal? id;
db.Entities.Where(m=>m.id==(id??m.id))
The code is working.

moja baza danych to wyrocznia.
Co powinienem zrobić, aby kod działał?

Dzięki.

Odpowiedzi:

3 dla odpowiedzi № 1

Uwaga: w Oracle pusty ciąg ma wartość NULL.


1 dla odpowiedzi nr 2

Nie wiem o Oracle + EF i mapowaniach typów. Ale i tak nie jest to sposób, aby predykaty były opcjonalne, ponieważ teraz część x ?? x.y zawsze będzie częścią wyrażenia przetłumaczonego na SQL. Może to wpłynąć na optymalizację i wydajność zapytań.

Aby to zrobić, należy:

IQueryable<Entity> query = db.Entities;
if (!string.IsNullOrWhiteSpace(name))
{
query = query.Where(m => m.Name == name);
}