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ś ;) ?