Jestem nowy w LINQ i OrmLite / MySql. Mam argument żądania usługi, który musi doprowadzić do klauzuli where:
`Name` LIKE "%something%" OR `Name` LIKE "%something%else%"
Wiem, że mogę stworzyć IN()
lub =
Klauzula, poprzez:
ev.Where(rn => Sql.In(rn.Name, request.Name)); // Assuming an array here
ev.Where(rn => rn.Name== request.Name));
Ale nie mogę znaleźć konstruktu, który pozwoli mi zbudować LIKE
. Również, Name
jest tak naprawdę aliasem, więc próbuję uniknąć ręcznego tworzenia klauzuli where.
Odpowiedzi:
3 dla odpowiedzi № 1Możesz zbudować ten konkretny przykład używając Contains
, tj .:
ev.Where(rn => rn.Contains(rn.Name, "something")
|| rn.Contains(rn.Name, "something%else"));
StartsWith
i EndsWith
są generalnie używane w LINQ do generowania LIKE
klauzule ze znakiem wieloznacznym na jednym końcu (ale wygląda na to, że definiuje się dialekt MySql StartsWith
nieco różnie, prawdopodobnie pod względem wydajności.)
Możesz sprawdzić domyślny dialekt kod źródłowy aby potwierdzić, do czego jest generowany EndsWith
i Contains
.