J'ai une procédure qui me renvoie les identifiants d'entité dont j'ai besoin.
(Je décide de créer cette procédure, car les entités devant être réacheminées vers l'utilisateur final sont filtrées par des entités associées, mais ef core ne prend pas en charge le filtrage par des entités associées).
Ensuite, je veux utiliser cet identifiant pour obtenir les entités dont j'ai besoin avec leurs entités associées.
J'utilise l'opérateur "Any". À mon avis, il devrait générer une requête comme celle-ci: "WHERE id IN (1,2,3,4 ....)", mais il semble que cela ne fonctionne pas comme je le veux.
Au lieu de cela, il renvoie un avertissement avec l’information que la clause "Toute clause n’a pas pu être traduite et sera évaluée localement"
Comment je pourrais le réparer?
Moi code ci-dessous:
var assocsIds = await _context.Assoc.AsNoTracking()
.FromSql($"exec {SqlProcedures.GetAssocsForIndexProc} {query.IndexMviId}, {query.FilterByGroupId}")
.ToListAsync()
var productAssocs = await _context.Assoc
.Where(x => assocsIds.Any(z => z.Id == x.Id))
.Include(x => x.Attribute)
.ThenInclude(x => x.Translation)
.Include(x => x.Option)
.ThenInclude(x => x.Translation)
.Include(x => x.Mvi)
.ThenInclude(x => x.Translation)
.AsNoTracking()
.ToListAsync()
;
Pouvez-vous d’abord sélectionner les "ID" d’ assocsIds dans une autre variable, puis essayer ce qui suit?
var productAssocs = await _context.Assoc
.Where(x => yourIdsList.Contains(x.Id))
.Include(x => x.Attribute)
.ThenInclude(x => x.Translation)
.Include(x => x.Option)
.ThenInclude(x => x.Translation)
.Include(x => x.Mvi)
.ThenInclude(x => x.Translation)
.AsNoTracking()
.ToListAsync();