Struktura danych wygląda następująco:Użytkownicy zapytania, którzy mają wszystkie wymagane rekordy w dwóch tabelach
Użytkownika (id)
UserApp (user_id, APP_ID)
UserSkill (user_id, skill_id)
Korzystając z linq-sql lub EF, jak skonstruować zapytanie, by elegancko zwracać tylko tych użytkowników, którzy posiadają każdą żądaną aplikację i umiejętności?
Ponadto, w jaki sposób dostosować zapytanie, aby zwrócić użytkownika posiadającego przynajmniej jedną z żądanych aplikacji lub umiejętności? Zasadniczo OR vs AND (powyżej).
UPDATE 1:
Więc myślę, że jesteśmy blisko. Zasadniczo chcę tylko zwrócić użytkowników, którzy mają WSZYSTKIE żądane aplikacje i umiejętności. Jeśli mamy dwie tablice wymaganych identyfikatorów dla umiejętności i aplikacje:
int[] requestedAppIDs // [1, 2, 3]
int[] requestedSkillIDs // [4, 5, 6]
chciałbym tylko zwrócić użytkownikowi jeśli mają aplikacje 1,2,3 i umiejętności 4,5,6.
var usersWithAllSelectedAppsAndSkills =
context.Users
.GroupJoin(context.UserApp,
k => k.id,
k => k.user_id,
(o, i) => new { User = o, UserApps = i })
.GroupJoin(context.UserSkill,
k => k.User.id,
k => k.user_id,
(o, i) => new { User = o.User, o.UserApps, UserSkills = i })
.Where(w => !requestedAppIDs.Except(w.UserApps.Select(x => x.app_id).ToArray()).Any() && !requestedSkillIDs.Except(w.UserSkills.Select(x => x.skill_id).ToArray()).Any())
.Select(s => s.User)
.ToList();
Oczywiście, LINQ nie wiem jak przetłumaczyć UserSkills.Select(). ToArray() jest w moim przypadku() SQL. Jak mogę to zrobić?
I, po drugie, również rozwiązanie OR (użytkownik ma jedną z żądanych aplikacji lub umiejętności).
co z moją odpowiedź To nie działa? – MajkeloDev
@bmherold można podać strukturę DB i przykład? – Mairaj
@bmherold Co jest niejasne lub niezbyt zwięzłe w moim rozwiązaniu? Możesz bardzo łatwo zmienić (mając wszystkie/dowolne umiejętności) (i/lub) (mając wszystko/dowolną aplikację). Moje rozwiązanie jest na tyle małe, że można je ćwierkać;) Myślę więc, że tak naprawdę to nie martwi. Proszę, pomyśl, co cię martwi i wyjaśnij. Być może nie wyjaśniłeś w dobry sposób tego, czego szukasz ... lub nawet nie wiesz tego. – JotaBe