[英]C# MediatR: Return nested/compound DTO
我想返回一个复合/嵌套 DTO SearchDto
,其中包括Status(timeMs, resultsFound)
和List<SearchResult>
。
{
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"
}
}
]}
// 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);
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.