首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Automapper通过分组将表映射到嵌套类

Automapper通过分组将表映射到嵌套类
EN

Stack Overflow用户
提问于 2020-11-18 19:39:49
回答 2查看 130关注 0票数 0

我有两张桌子:Staff & Address

这种关系是1比多(假设1名工作人员可以有多个地址)。

  1. Staff

StaffId

++++++++++++++++++++++++++

1.商业、金融、商业、金融、商业、商业、金融、商业、金融、金融等行业的商业、金融、商业、金融、金融等行业。

2、商业、商业、金融等领域。

(3)成品率

  1. Address

AddressId

+++++++++++++++++++++++++++++++++++++++++++

1/1

2成品率

3

4

5

 /T1666-1996技术、技术等方面的研究

为了获取员工信息和他们的地址,我在Address表(Dapper )上使用了一个左联接查询。

然后我得到这样的数据,

AddressId

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

1/1

2成品率-2

3、暗中性价廉

4-4

5成品率、成品率等

6/6机、机、工、技术等

如何使用AutoMapper和staffId嵌套分组将这些数据映射到下面的DTO?

代码语言:javascript
运行
复制
public class StaffDto
{
    public long StaffId { get; set; }
    public string StaffName { get; set; }
    public List<Address> Address { get; set; }
}
public class Address
{
    public long AddressId { get; set; }
    public string Address{ get; set; }
}

示例数据应该如下所示:

代码语言:javascript
运行
复制
{
  "staffId": 1,
  "staffName": "Sarah",
  "address": 
      [
          {
            "addressId": 1,
            "street": "292  Oak Drive"
          },
          {
            "addressId": 2,
            "street": "560  Pine Garden Lane"
          }
      ]
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-19 09:24:58

让人有点困惑的是,你从一个地址加入到另一个员工,而不是其他方式,因为你不想要一个地址列表,而是一个员工和他们的地址列表。你根本不需要Automapper,Dapper为你做的很好。这应该能起作用:

代码语言:javascript
运行
复制
var sql = "SELECT StaffId, StaffName. AddressId, Street FROM Staff INNER JOIN Address ON Staff.StaffId = Address.StaffId";
var staffDictionary = new Dictionary<int, StaffDto>();
var result = connection.Query<StaffDto, Adress, StaffDto>(sql,
    (s, a) => { 
        StaffDto staff;
        if (!staffDictionary.TryGetValue(s.StaffId, out staff))
        {
            staff = s;
            staffDictionary.Add(staff);
        }
        staff.Address.Add(a);
        return staff; 
    }, splitOn: "AddressId");
// Here are your staff
return staffDictionary;

这个想法是,如果你遇到一个“新”员工,你把它添加到字典中,否则你就会和你已经拥有的员工一起去。在所有情况下,地址都添加到工作人员中。你也许可以用你的左加入来完成这个任务,但我不明白你为什么会这样做。

票数 0
EN

Stack Overflow用户

发布于 2020-11-19 07:34:51

我查阅了许多方法和材料。由于在使用automapper时使用了多个循环,因此使用automapper无法满足这一要求。但是另一种方法被发现了。下面是一个例子。

根据您提供的模型,生成数据库。

以正常的方式获得StaffsAddresses。然后,在循环中处理值。

代码语言:javascript
运行
复制
 public IActionResult get()
    {
        var staff = context.Staffs.ToList();
        var address = context.Addresses.ToList();

        foreach(var staf in staff)
        {
            staf.address = address.Where(x => x.StaffId == staf.StaffId).Select(x=> {
                x.staffDto = null;
                return x;
                }).ToList();

        }
        return Ok(staff);
    }

它就能得到那个结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64900192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档