J'ai un contrôleur API Entity Framerwork qui retourne une liste d'objets appelés «systèmes».
Dans cet objet, j'ai une propriété ICollection appelée StarSystems qui est une collection d'entiers qui représentent des noms de chaîne.
Au lieu de renvoyer le tableau d'ints, je voudrais retourner les noms réels que ces ints représentent.
Ainsi, au lieu que StarSystems ressemble à ceci:
[1, 2, 3] or [1, 3] etc...
ça ressemblerait à ça
["Alpha Zeta III", "Omega System X", "Cygnus X-1"] or ["Alpha Zeta III", "Cygnus X-1"] etc...
J'ai donc essayé de le faire pour qu'il renvoie la chaîne souhaitée en fonction de l'int, mais cela me donne cette erreur:
Operator '==' cannot be applied to operands of type 'ICollection<StarSystems>' and 'int'
var systems = await _context.System
.Select(x => new SystemEntity
{
Id = x.Id,
StarSystems = (x.StarSystems == 1) ? "Alpha Zeta III" : (x.StarSystems == 2) ? "Omega System X" : (x.StarSystems == 3) ? "Cygnus X-1",
Title = x.Title,
.ToListAsync();
Y a-t-il un moyen de faire cela?
Merci!
Vous auriez besoin d'une classe de modèle de vue dans laquelle la propriété StarSystems
est un énumérable de chaînes plutôt que d'entiers, puis StarSystems
-y. Vous ne pouvez pas simplement convertir des chaînes et les replacer dans la même collection int.
En supposant que le type de propriété réel est un énumérable de chaîne, le code que vous avez doit fonctionner tel quel. Cependant, il serait probablement plus judicieux d'utiliser une énumération plutôt qu'un simple entier plat, vous n'avez donc pas besoin de ternaires par-dessus les ternaires. Bref, vous pouvez également simplement utiliser une expression de commutateur:
StarSystems = x.StarSystems switch
{
1 => "Alpha Zeta III",
2 => "Omega System X",
3 => "Cygnus X-1",
_ => throw new InvalidOperationException("Invalid star system id.")
}