Mam procedurę w języku SQL, którą próbuję przekształcić w Linq:
SELECT O.Id, O.Name as Organization
FROM Organizations O
JOIN OrganizationsHierarchy OH ON O.Id=OH.OrganizationsId
where OH.Hierarchy like '%/12/%'
Linia, którą najbardziej mnie interesuje to:
where OH.Hierarchy like '%/12/%'
Mam kolumnę, która przechowuje hierarchię, na przykład / 1/3/12 /, więc po prostu używam% / 12 /% do jej wyszukiwania.
Moje pytanie brzmi: jaki jest Linq lub .NET odpowiednik używania znaku procentu?
5
głosy na tag operatora podobnego . Czy mogę prosić o zasugerowanie sql-like jako synonimu ?Odpowiedzi:
Możesz także użyć
.StartsWith()
lub.EndsWith()
.źródło
StartsWith("abc")
zostaje przekonwertowany naLIKE 'abc%'
iEndsWith("abc")
zostaje przeniesiony doLIKE '%abc'
.ToLower().Contains()
itp., Jeśli chcesz zignorować wielkość liter. To, czy chcesz, będzie oczywiście zależeć od tego, czy próbujesz naśladować LIKE z bazy danych z sortowaniem bez rozróżniania wielkości liter, czy nie.Użyj tego:
źródło
SqlMethods
z „notacji kropkowej”?System.Data.Linq.SqlClient
przestrzeń nazw.Zakładam, że używasz Linq-to-SQL * (patrz uwaga poniżej). Jeśli tak, użyj string.Contains, string.StartsWith i string.EndsWith, aby wygenerować SQL korzystający z operatora SQL LIKE.
lub
Uwaga: * = jeśli korzystasz z ADO.Net Entity Framework (EF / L2E) w .net 3.5, pamiętaj, że nie wykona tego samego tłumaczenia co Linq-na-SQL. Chociaż L2S wykonuje prawidłowe tłumaczenie, L2E v1 (3.5) przekształci się w wyrażenie t-sql, które wymusi pełne skanowanie tabeli w zapytanej tabeli, chyba że istnieje inny lepszy dyskryminator w klauzuli where lub filtrach łączenia.
Aktualizacja: Zostało to naprawione w EF / L2E v4 (.net 4.0), więc wygeneruje SQL LIKE, podobnie jak L2S.
źródło
@
znakiem, ale zdaję sobie sprawę, że może to być dobra konwencja do naśladowania.Jeśli używasz VB.NET, odpowiedzią byłoby „*”. Oto, jak wyglądałaby Twoja klauzula where ...
Uwaga: „*” Dopasowuje zero lub więcej znaków. Oto artykuł msdn dla operatora Like .
źródło
Cóż, indexOf też działa dla mnie
źródło
Użyj takiego kodu
źródło
Rdzeń .NET ma teraz
EF.Functions.Like
źródło
Jeśli nie pasujesz ciągów liczbowych, zawsze dobrze jest mieć wspólny przypadek:
źródło
Robię to zawsze:
Wiem, że nie używam podobnej instrukcji, ale działa dobrze w tle, to jest przetłumaczone na zapytanie z podobną instrukcją.
źródło
Spróbuj tego, to działa dobrze dla mnie
źródło
źródło
Zawiera jest używany w Linq, podobnie jak Like jest używany w SQL.
. . .
Możesz napisać skrypt SQL w Linq w następujący sposób:
źródło
Dla tych, którzy lubią tutaj szukać sposobu na metodę „SQL Like” w LINQ, mam coś, co działa bardzo dobrze.
Jestem w przypadku, gdy nie mogę w żaden sposób zmienić bazy danych, aby zmienić układ kolumn. Więc muszę znaleźć sposób w moim LINQ, aby to zrobić.
Używam metody pomocnika
SqlFunctions.PatIndex
która działa podobnie do prawdziwego operatora SQL LIKE.Najpierw muszę wymienić wszystkie możliwe znaki diakrytyczne (słowo, które właśnie się nauczyłem) w wartości wyszukiwania, aby uzyskać coś takiego:
a następnie w LINQ na przykład:
Więc na moje potrzeby napisałem metodę pomocnika / rozszerzenia
Jeśli ktoś z was ma sugestię, aby ulepszyć tę metodę, chętnie Cię wysłucham.
źródło
Znacznie późno, ale rzuciłem to razem, aby móc porównywać ciągi znaków przy użyciu symboli wieloznacznych w stylu SQL:
źródło