「システム」と呼ばれるオブジェクトのリストを返すエンティティフレーマーAPIコントローラーがあります。
そのオブジェクトには、文字列名を表すintのコレクションであるStarSystemsというICollectionプロパティがあります。
intの配列を返す代わりに、それらのintが表す実際の名前を返したいと思います。
したがって、StarSystemsの代わりに次のようになります。
[1, 2, 3] or [1, 3] etc...
それはこのようになります
["Alpha Zeta III", "Omega System X", "Cygnus X-1"] or ["Alpha Zeta III", "Cygnus X-1"] etc...
そのため、intに基づいて目的の文字列を返すようにこれを試みましたが、次のエラーが発生します。
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();
これを行う方法はありますか?
ありがとう!
StarSystems
プロパティが整数ではなく文字列の列挙可能なビューモデルクラスが必要であり、それに投影されます。文字列に変換して、それを同じintコレクションに戻すことはできません。
実際のプロパティタイプが文字列の列挙可能であると仮定すると、コードはそのまま動作するはずです。ただし、単にフラットな整数ではなく列挙型を使用する方が理にかなっているので、3進数の上に3進数を置く必要はありません。それ以外に、スイッチ式を使用することもできます。
StarSystems = x.StarSystems switch
{
1 => "Alpha Zeta III",
2 => "Omega System X",
3 => "Cygnus X-1",
_ => throw new InvalidOperationException("Invalid star system id.")
}