为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用正确的 json 响应在实体框架中实现多个表左连接

如何使用正确的 json 响应在实体框架中实现多个表左连接

C#
PIPIONE 2022-07-10 16:24:58
我正在尝试使用 Entity Framework LINQ 语句加入 3 个表。这是我的数据库图:表中数据DeviceTypeGroups:  Key         | Name  ------------+-------------------   111             GroupOne  112             GroupTwo表中数据DeviceTypes:  Key         | Name         | DeviceTypeGroupKey  ------------+--------------+--------------------  1             Type1          111  2             Type2          111  3             Type3          112表中数据Peers:  Key         | Name         | DeviceTypeGroupKey  ------------+--------------+---------------------  1             Peer1          111  2             Peer2          112  3             Peer3          112我想得到这样的输出:这是我正在尝试的 LINQ 代码和 C# Web API 方法    [HttpGet]    [Route("devicetypegroups")]    [Produces("application/json")]    [SwaggerOperation("GetDeviceTypeGroups")]    [SwaggerResponse(400, "Bad input parameter")]    [SwaggerResponse(404, "Not found")]    [SwaggerResponse(500, "Internal server error")]    public virtual IActionResult GetDeviceTypeGroups()    {        try        {            var devicetypegroups =                 (from dtg in _context.DeviceTypeGroups join dt in _context.DeviceTypes                  on dtg.Key equals dt.DeviceTypeGroup.Key into dtgleft from dtgrecs in dtgleft.DefaultIfEmpty()                 join pr in _context.Peers on dtgrecs.Key equals pr.DeviceTypeGroup.Key into peerleft                 from peerleftRecs in peerleft.DefaultIfEmpty()                 select new { dtg.Key, dtg.Name, dtg.DeviceTypes, dtg.Peers }).ToList();           }       }但它没有返回正确的响应,它添加了一些额外的记录:如您所见,它创建了与设备类型计数相同的额外节点数!
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

你想要下面的东西:


    var details = (from dtg in _context.DeviceTypeGroups

                      join dt in _context.DeviceTypes on dtg.Key equals dt.DeviceTypeGroup.Key into dtgleft

                 from dtgrecs in dtgleft.DefaultIfEmpty()

                      join pr in _context.Peers on dtgrecs.Key equals pr.DeviceTypeGroup.Key into peerleft 

                 from peerleftRecs in peerleft.DefaultIfEmpty()

                      select new

                      {

                          dtg.Key,

                          dtg.Name,

                          dtg.DeviceTypes,

                          dtg.Peers

                       }).ToList();


查看完整回答
反对 回复 2022-07-10
?
ITMISS

TA贡献1871条经验 获得超8个赞

这就是我通过使用解决它的方式AutoMapper

        var devicetypegroups = await _context.DeviceTypeGroups
                .Include(b => b.DeviceTypes)
                .Include(p => p.Peers)
                .ToListAsync();
        var model = _mapper.Map<IEnumerable<DeviceTypeGroupDto>>(devicetypegroups);

:)


查看完整回答
反对 回复 2022-07-10
  • 2 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信