LINQ group by pomoc w zapytaniu

Odpowiedz Nowy wątek
2018-11-03 09:34
0

cześć,
piszę z prośbą o pomoc w budowie zapytania LINQ.
Zbudowałem zapytanie, ale za wcześnie pobieram wynik i na nim wykonuję kolejne, a chciałbym, żeby całe to zapytanie poszło po stronie bazy ;)

sytuacja jest taka:

QueryDictionaryValues

-> odpytuje tabelę w postaci (UserDetailsId, UserDetailsDictionaryItemId, Value (bool, na razie pomijam tą wartość)

z kolei

dto.InterestIds

zawiera tablicę intów o które chcę odpytać przez QueryDictionaryValues
zapytanie ma zwrócić wszystkie usersDetailsId, które występują jednocześnie z każdym z dto.InterestIds

przykład


userDetailsId: 1, UserDetailsDictionaryItemId 5
userDetailsId: 1, UserDetailsDictionaryItemId 6
userDetailsId: 2, UserDetailsDictionaryItemId 5
userDetailsId: 2, UserDetailsDictionaryItemId 3
userDetailsId: 3, UserDetailsDictionaryItemId 5
userDetailsId: 3, UserDetailsDictionaryItemId 6

dla zapytania w dto.InterestId[] { 5,6 }
mają zostać zwrócone
userDetailsId[] {1,3}

moje zapytanie po stronie kodu wygląda tak:


            if (dto.InterestIds?.Length > 0)
            {
                int[] typedUsersIds;

                var interestQuery = dao.QueryDictionaryValues()
                    .Where(x => userDetailsIds.Contains(x.UserDetailsId))
                    .GroupBy(x => x.UserDetailsId)
                    .Select(x => new { userId = x.Key, interest = x.Select(y => y.UserDetailsDictionaryItemId) });

                typedUsersIds = interestQuery.Where(x =>
                                !dto.InterestIds.Except(x.interest).Any())
                                .Select(x => x.userId).ToArray();

            }

jednak na etapie .interestQuery.[...].Select identyfikatory są już zaciągnięte z bazy (tzn. zapytanie już się wykonało).
chciałbym to zapytanie połączyć z zapytaniem typedUsersIds
pomoże ktoś ;) ?

Pozostało 580 znaków

2018-11-03 11:39
0

Jakiego ORM'a uzywasz ?

Pozostało 580 znaków

2018-11-05 15:14
hey-you
0

ef core

Pozostało 580 znaków

2018-11-05 15:38
0
hey-you napisał(a):

ef core

Która wersja? Przed 2.1 grupowanie zawsze odbywało się w pamięci: https://docs.microsoft.com/en[...]-2.1#linq-groupby-translation

Pozostało 580 znaków

2018-11-05 16:06
hey-you
0
czesiek napisał(a):
hey-you napisał(a):

ef core

Która wersja? Przed 2.1 grupowanie zawsze odbywało się w pamięci: https://docs.microsoft.com/en[...]-2.1#linq-groupby-translation

2.0
to szkoda.
a gdyby było to 2.1 to moglibyscie pomoc z zapytaniem ;) ?

Podnieś wersję i sprawdź czy działa. Myślę, że powinno. - czesiek 2018-11-06 17:11

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0