繁体   English   中英

C# MediatR:返回嵌套/复合 DTO

[英]C# MediatR: Return nested/compound DTO

我想返回一个复合/嵌套 DTO SearchDto ,其中包括Status(timeMs, resultsFound)List<SearchResult>

示例 JSON DTO

{
status: {
        timeMs: 0.038583,
        found: 728,
    },
    results: [
        {
            id: "c00f9c89-0683-4818-9043-0df10704f7dc",
            score: "32.03388",
            fields: {
                id: "f42d2a0d-3a30-4cb6-940f-fb474b82588b",
                type: "client",
                title: "Business Pty Ltd",
                description: "Client from Australia",
                status: "Active",
                url: "#client/f42d2a0d-3a30-4cb6-940f-fb474b82588b"
            }
        }
]}

SearchDto.cs

    // The Search Result Data Transfer Object
    public record SearchDto(SearchStatusDto status, IEnumerable<SearchResultDto> results);

    // Status contains metadata about the search
    public record SearchStatusDto(double timeMs, int found);

    // Each Search Result has a unique ID and relevancy score; then contains the payload containing the result
    public record SearchResultDto(Guid id, double score, SearchResultFieldsDto fields);

    // Actual search data that gets displayed
    public record SearchResultFieldsDto(Guid id, string type, string title, string description, string status, string url);

GetSearchResultsQueryHandler.cs

public async Task<SearchDto> Handle(GetSearchResultsQuery request, CancellationToken cancellationToken)
        {
            // Getsome data from the Search Results Entity.
            var items = await context.SearchResult.AsNoTracking().ToListAsync();
            // Map it to the Search Result Dto.
            var results = mapper.Map<IEnumerable<SearchResultDto>>(items);
            // Create the status object with example data.
            var SearchStatusDto status = new SearchStatusDto(0.00383, 500);
            // Amalgamate the status and List<Result> and return. (not implemented)
            return results;
        }

问题

我遇到的问题是:

The name 'status' does not exist in the current context [OrganisationName.Services.Api]csharp(CS0103)

我对 C#、.Net 和 MediatR 还很陌生,所以我不确定我是否正确地解决了这个问题。像这样使用 MediatR 是否可能/可取?

解决方案可能是在返回之前构造 SearchDTO。 我还没有测试过这是否有效,但如果没有,我会更新答案。

public async Task<SearchDto> Handle(GetSearchResultsQuery request, CancellationToken cancellationToken)
        {
            var items = await context.People.AsNoTracking().ToListAsync();
            var results = mapper.Map<IEnumerable<SearchResultDto>>(items);
            return new SearchDto(
                new SearchStatusDto(0.03838, 300),
                results
            );
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM