【解決方法】タイプ ‘task’ を ‘task’ に暗黙的に変換することはできません [API]

プログラミングQA


こんにちは、みんな、

「ProductTypes」のリストを返そうとするシナリオに直面しています。 コードの多くの場所でこのリストが必要になる可能性があるため、非同期メソッドを定義し、別の非同期からそのメソッドを呼び出します [HttpGet] メソッドを呼び出して、結果をフロントエンドに再実行しようとしています。

Interface を別の Interface に変換できないことは理解できますが、ProductTypes のリストを返すため、問題にはならなかったはずです。

非同期メソッドを以下に示します。

<pre><pre>private async Task<IEnumerable<ProductTypesData>> GetProductTypes() {
            return await _context.ProductTypePool
                .Where(ProdType => ProdType.ProdParentTypeId == 0 && ProdType.IsActive == true)
                .OrderBy(ProdType => ProdType.ProdTypeId)
                .Select(ProdType => new ProductTypesData { ProdTypeId = ProdType.ProdTypeId, ProdTypeName = ProdType.ProdTypeName, ProdTypeDesc = ProdType.ProdTypeDesc})
                .ToListAsync();
        }

次に、別の非同期からこのメソッドを呼び出しています [HttpGet] 以下に示すように、メソッド:

[HttpGet]
        public async Task<ActionResult<IEnumerable<ProductTypesData>>> GetAllProductTypes()
        {
            return this.GetProductTypes();
        }

私が試したこと:

結果を具体的な List クラスにラップしようとしました。

[HttpGet]
        public async Task<ActionResult<IEnumerable<ProductTypesData>>> GetAllProductTypes()
        {
            return new List<ProductTypesData>(this.GetProductTypes());
        }

しかし、これはうまくいきませんでした。

また、IEnumerable の代わりに IList を使用しようとしましたが、そこでも同じです。

データのリストを返す必要があり、そのリストがコードの多くの場所で使用される可能性があるような状況での解決策を教えてください。

ありがとう。

解決策 1

必要がある await から返されたタスク GetProductTypes.

.NET Core / .NET 5+ を使用していると仮定すると、単純にその結果を返すことができます – ActionResult<T> もっている 暗黙の変換[^] から T:

C#
[HttpGet]
public async Task<ActionResult<IEnumerable<ProductTypesData>>> GetAllProductTypes()
{
    return await this.GetProductTypes();
}

コメント

タイトルとURLをコピーしました