我在某个时候停止了,我不知道如何将 Project 列表映射到 ProjectResponse 对象列表。ProjectResponse 是 Project 模型类及其技术上的 DTO 对象的缩短版本。
这是事情
public async Task<IEnumerable<ClientResponse>> Handle(GetClientsQuery query, CancellationToken cancellationToken)
{
List<Client> clientsDb = await _context.Clients.Include(x => x.Projects).Where(client => !client.IsDeleted).ToListAsync();
Result<List<UserData>> clientsIdentity = await _identityService.GetClients(clientsDb.Select(x => x.IdentityId).ToList());
List<ClientResponse> clients = new List<ClientResponse>();
foreach (var client in clientsIdentity.Data)
{
clients.Add(new ClientResponse
{
//two properties are filling up from clientsIdentity.Data
Email = client.Email,
Name = client.Name,
//second two from clientsDb
Id = clientsDb.FirstOrDefault(x => x.IdentityId.Equals(client.Id)).Id,
//One client has multiple projects (List<Project>)
//List<Project> need to be transformed and packed to List<ProjectResponse> (it's a dto object for Project model)
Projects = clientsDb.Where(x => x.IdentityId.Equals(client.Id)).Select(x => new ProjectResponse
{
//it shouldnt be FirstOrdefault - it now picksup always just from the first one, it should be some kind of foreach of projects..
Id = x.Projects.FirstOrDefault().Id,
Code = x.Projects.FirstOrDefault().Code,
Name = x.Projects.FirstOrDefault().Name,
}).ToList()
});
}
return clients;
}
所以我设法只映射FirstOrDefault
对象,但基本上我需要遍历 CLient 拥有的每个项目,并映射到新的 ClientResponse 项目,实际上是添加它们。
我认为您的问题是,对于迭代中的每个客户端,您都会检索许多客户端。它应该只有一个具有该 id 的方法,因此应该使用 First、Single、FirstOrDefault 等方法,然后您可以转换项目:
//...
Projects = clientsDb.Single(x => x.IdentityId.Equals(client.Id)).Projects.Select(x => new ProjectResponse...
或者,如果你有一个导航属性Client
,Project
你可以像这样使用它:
//...
Projects = client.Projects.Select(x => new ProjectResponse...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句