Exception lors de la requête : "Impossible de créer une valeur constante de type API.Models.PersonProtocol. Seuls les types primitifs ou énumérés sont pris en charge dans ce contexte."
Cause fondamentaleLe problème spécifique est que la collection ppCombined représente les données en mémoire, tandis que la requête est exécutée sur les données de la base de données. Les deux ensembles de données ne peuvent pas être combinés.
Solution
Requête modifiée
La méthode
<code class="language-csharp">var persons = db.Favorites .Where(f => f.userId == userId) .Join(db.Person, f => f.personId, p => p.personId, (f, p) => new // 匿名对象 { personId = p.personId, addressId = p.addressId, favoriteId = f.favoriteId, }) .AsEnumerable() // 数据库查询在此处结束,其余部分是内存中的查询 .Select(x => new PersonDTO { personId = x.personId, addressId = x.addressId, favoriteId = x.favoriteId, personProtocol = ppCombined .Where(p => p.personId == x.personId) .Select(p => new PersonProtocol { personProtocolId = p.personProtocolId, activateDt = p.activateDt, personId = p.personId }) .ToList() });</code>
garantit que la requête de base de données se termine avant de poursuivre la requête en mémoire. Cela permet à la collection ppCombined d'être filtrée et projetée en mémoire après avoir récupéré les données de la base de données. AsEnumerable()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!