Uso il nucleo EF e ho le classi "Utente" e "Autorità" che sono connesse con una relazione molti-a-molti ("Utenti" ha una proprietà "autorità" e "Autorità" ha una proprietà "utenti"). La relazione è gestita tramite la classe media "UserAuthority".
Devo interrogare tutti gli "utenti" che hanno "autorità" con determinati nomi.
Ho provato questo:
List<string> authorities = A list of authorities;
(from user in this.dbContext.user.Include("authorities.authority")
where authorities.Any(x => user.authorities.Any(y => y.authority.authority == x))
select new UserDto(user.id, user.firstname + " " + user.lastname)).ToList()
Ma la console dice che LINQ non può tradurre
authorities.Any(x => user.authorities.Any(y => y.authority.authority == x))
e che sarà gestito nella memoria.
Qual è l'approccio corretto qui?
Attualmente l'unico metodo di raccolta in memoria traducibile è Contains
(per la raccolta in-memory di tipo primitivo, si traduce in SQL IN(...)
).
Quindi invece di
authorities.Any(x => user.authorities.Any(y => y.authority.authority == x))
uso
user.authorities.Any(ua => authorities.Contains(ua.authority.authority))