Wildcards Entity Framework i Linq
Czy jest możliwe skonstruowanie prawidłowego zapytania Linq zawierającego znaki wieloznaczne?
Widziałem różne odpowiedzi na to pytanie, które sugerują użycie:
.Where(entity => entity.Name.Contains("FooBar"))
.Where(entity => entity.Name.EndsWith("Bar"))
.Where(entity => entity.Name.StartsWith("Foo"))
LUB konstruowanie RawSql:
var commandText =
@"SELECT field
FROM table
WHERE field LIKE @search";
var query = new ObjectQuery<Profile>(commandText, context);
query.Parameters.Add(new ObjectParameter("search", wildcardSearch));
Pierwsze rozwiązanie nie zadziałałoby, gdyby symbol wieloznaczny nie znajdował się na początku lub na końcu łańcucha, na przykładsearchTerm = "Foo%Bar"
.
Drugie rozwiązanie, korzystające z RawSql, nie pasuje do mnie i wygląda na tanie wyjście. Ale to działa.
Trzecią opcją, którą muszę jeszcze wypróbować, jest stworzenie czegoś, co może przeanalizować wyszukiwane hasło i skonstruować poprawne zapytanie Linq, co jest czymś, na co @Slauma miał dostęp w linku 2 poniżej. Ale to nadal nie zadziałałoby, gdyby symbol wieloznaczny nie znajdował się na początku lub na końcu wyszukiwanego hasła.
Więc pytanie: Czy możliwe jest skonstruowanie prawidłowego zapytania Linq zawierającego znaki wieloznaczne?
EDYCJA: Warto wspomnieć, że w tej instancji używają Oracle Data Access Components (ODAC / ODP), ale nie sądzę, aby w tym przypadku miało to duże znaczenie.
spinki do mankietów:
1„Podobne” zapytania w Entity Framework
2.wyszukiwanie dokładne i wieloznaczne uzależnione od wyszukiwanego hasła