如何在 linq lambda select 的帮助下映射到另一个对象列表

Stefan0309

我在某个时候停止了,我不知道如何将 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...

或者,如果你有一个导航属性ClientProject你可以像这样使用它:

//...
Projects = client.Projects.Select(x => new ProjectResponse...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用流 lambda 将包含其 Collection 成员的对象列表映射到另一个具有 Set 作为成员的对象?

Automapper如何将一个对象的列表映射到另一个对象的列表

如何在 LINQ C# 中使用另一个列表过滤列表

如何在另一个列表中过滤列表MVC LINQ

如何使用 linq 返回与 lambda 相同的对象

如何将一个对象映射到另一个对象?

如何从流中的模型对象获取字段列表并映射到另一个模型对象?

如何使用 Linq 将一个列表投影到另一个列表?

如何将一个可观察对象映射到另一个

如何将对象映射中的数组映射到另一个数组

如何在另一个Lambda主体中“粘合” Lambda?

如何在Lambda体内使用的另一个函数中调用Lambda中的函数

在LINQ中重用Lambda Select片段

LINQ select子句中的Lambda函数

C#-根据与另一个列表(Linq + Lambda)的部分交集,从列表中选择特定项目

如何在C#中使用Linq通过比较另一个列表中的值来过滤列表?

如何在Linq中使用Select

Linq如何在select中传递参数

如何使用AutoMapper将嵌套列表映射到另一个列表

Angular 9 如何将 1 个对象映射到另一个

如何在LINQ中将对象的所有属性复制到另一个

如何在Rust中将一个结构映射到另一个结构?

如何使用基于另一个列表的lambda从列表中删除元素

如何使用linq将数据列表分组到另一个列表中?

如何使用linq从另一个列表中的列表中获取总和作为属性

如何使用Linq使用另一个列表的值对列表进行排序

如何将对象响应映射到 Java 中的另一个 ObjectDto

如何编写LINQ查询以使用C#从另一个对象获取对象?

用linq和lambda比较两个列表,其中一个是字符串,另一个是长整数