Nie oczekuję kodu. A raczej podpowiedzi, naprowadzenia. Słuchajcie muszę zrobić akcję do przeszukiwania bazy danych. Szukać można za pomocą 4 kryteriów. jakieś znaki data rozpoczęcia data zakończenia rodzaj usera
I każdy z nich jest opcjonalny(oczywiście 2 i 3 muszą występować razem). Oczywiście wyszukiwania nie mogą się powtarzać itd. itp.
I tu jest problem. Zacząlem robić tak, że po kolei sprawdzam każdą zmienną czy nie jest nullem. Pobieram wartości pasujące do wyszukiwanej frazy i tu się zaczynają schody. Bo User jest w relacji jeden do wielu względem rodzaju usera. Tu robi mi się pełno pętel sprawdzania i mnóóóóóstwo kodu. Jestem pewny, że już się z takim czymś spotkaliście i wiecie jak to zoptymalizować.
@Phoryn: jakiego ORM używasz? jak w ogóle zapytania kreujesz? proponuje poćwiczyc proste zapytania SQL, od tego będzie potem łatwiej wyjść. W ogóle zaczałbym od klasyczne ADO.NET ze składowanymi procedurami.
@Phoryn: albo dawaj sampla albo usun konto. Kazdy ma w glowie inna architekture tego twojego tałatajstwa i mamy slyszec w odpowoedzi: "no tak ale u mnie by nie zadzialalo bo mam jeszcze x i y" :P
@Phoryn: ciężko powiedzieć, ta linijka może być poprawna i nie ( ͡°͜ʖ͡°)
Od razu mówię, że z EF dużo nie działałem, ale ten Twój .Where nie powinien być wewnątrz Include? Albo chociaz jakiś join między Roles a Users? Przypuszczam.
@Phoryn: DateTime jest strukturą, więc nie może być nullem, ale jej wartość domyślna to DateTime.MinValue, więc możesz zrobić tak:
(from == DateTime.MinValue || to == DateTime.MinValue) || (q.Date >= from && q.Date <= to) - Zwróci Ci wyszystkie wyniki jak gdy podasz from lub to, w przeciwnym wypadku tylko z podanego zakresu
@MaGajwer: no nie jest poprawna EF wciąż nie ma ConditionalInclude, trzeba sobie dopisać samemu, mniej więcej tak: https://entityframework.net/include-with-where-clause (bo zakładam że chodzi o zwrócenie roli i userów którzy spełniają warunek, nie wszystkich ról w których którykolwiek user spełnia warunek)
@MaGajwer: @LoganWhyz: Dobra Panowie. W końcu przesiedziałem nad tym swoim kodem i jak zwykle oczy mi się otworzyły. Próbowaliście mi napisać, że najprostsze rozwiązanie ale... wiecie jak jest wystarczyło to
Witajcie wykopki
Nie oczekuję kodu. A raczej podpowiedzi, naprowadzenia.
Słuchajcie muszę zrobić akcję do przeszukiwania bazy danych.
Szukać można za pomocą 4 kryteriów.
jakieś znaki
data rozpoczęcia
data zakończenia
rodzaj usera
I każdy z nich jest opcjonalny(oczywiście 2 i 3 muszą występować razem). Oczywiście wyszukiwania nie mogą się powtarzać itd. itp.
I tu jest problem.
Zacząlem robić tak, że po kolei sprawdzam każdą zmienną czy nie jest nullem. Pobieram wartości pasujące do wyszukiwanej frazy i tu się zaczynają schody.
Bo User jest w relacji jeden do wielu względem rodzaju usera. Tu robi mi się pełno pętel sprawdzania i mnóóóóóstwo kodu. Jestem pewny, że już się z takim czymś spotkaliście i wiecie jak to zoptymalizować.
Pozdrawiam!
_context.Roles.Include(q => q.users).Where(f => f.users.Any(e => e.FirstName.ToUpper().Contains(search.Keyword.ToUpper()))).ToList()
@nietrolluje: Dzięki.
Od razu mówię, że z EF dużo nie działałem, ale ten Twój .Where nie powinien być wewnątrz Include? Albo chociaz jakiś join między Roles a Users? Przypuszczam.
(from == DateTime.MinValue || to == DateTime.MinValue) || (q.Date >= from && q.Date <= to)
- Zwróci Ci wyszystkie wyniki jak gdy podasz from lub to, w przeciwnym wypadku tylko z podanego zakresu
string.IsNullOrWhiteSpace(name)
EF wciąż nie ma ConditionalInclude, trzeba sobie dopisać samemu, mniej więcej tak:
https://entityframework.net/include-with-where-clause
(bo zakładam że chodzi o zwrócenie roli i userów którzy spełniają warunek, nie wszystkich ról w których którykolwiek user spełnia warunek)
Dobra Panowie. W końcu przesiedziałem nad tym swoim kodem i jak zwykle oczy mi się otworzyły. Próbowaliście mi napisać, że najprostsze rozwiązanie ale... wiecie jak jest wystarczyło to
_context.Users.Include(q => q.roles)
.Where(