AutoMap踩雷篇

返回单个Dto对象

查询出来匿名类型单个对象,把匿名类型对象中某一个类MapTo Dto对象,然后再对Dto对象的其他属性赋值。

 var query = from a in db.MesMachineConfig
                                join b in db.Site_LineInfo on a.LineNum equals b.LineNum
                                join c in db.Site_PositionInfo on a.MCPosition equals c.MCPosition
                                join d in db.Site_LinePosition on new { A = a.LineNum, B = a.MCPosition }
                                equals new { A = d.LineNum, B = d.MCPosition }
                                where a.MachineNum == machineNum && a.Enable == "Y"
                                select new { a, b.LineName,c.PositionName };
                    if (query.Count() == 1)
                    {
                        var data = query.First().a.MapTo<MesMachineConfigDto>();
                        data.LineName = query.First().LineName;
                        data.PositionName = query.First().PositionName;
                        return data.ToJson();
                    }

返回多个Dto对象

查询出来匿名类型集合对象,直接MapToList <> Dto对象的话,将会出现严重错误。如下:

   var query = (from a in db.DGGJOneReelNumManagerParamsSettings
                     join b in db.MesMachineConfig
                         on a.MachineNum equals b.MachineNum
                         join c in db.Site_LineInfo
                             on b.LineNum equals c.LineNum
                     where (baseMachineQuery.LineNum == null ? true : b.LineNum == baseMachineQuery.LineNum)
                           && (baseMachineQuery.MachineNum == null ? true : a.MachineNum == baseMachineQuery.MachineNum)
                     select new 
                     {
                        a,
                        b.LineNum,
                        c.LineName,
                        b.MachineName

                     });

                 var result = (await query.ToListAsync()).MapToList<DGGJOneReelNumManagerParamsSettingsDto>();

                 return result;

输出如下:

"{\"code\":0,\"message\":\"查询参数配置成功\",\"data\":[{\"MachineNum\":null,\"MachineName\":\"C01-031\",\"LineNum\":\"D\",\"LineName\":\"D\",\"NG1\":null,\"NG1Enable\":false,\"NG2\":null,\"NG2Enable\":false,\"NG3\":null,\"NG3Enable\":false,\"CE1\":null,\"CE1Enable\":false,\"CE2\":null,\"CE2Enable\":false},{\"MachineNum\":null,\"MachineName\":\"C01-034\",\"LineNum\":\"D\",\"LineName\":\"D\",\"NG1\":null,\"NG1Enable\":false,\"NG2\":null,\"NG2Enable\":false,\"NG3\":null,\"NG3Enable\":false,\"CE1\":null,\"CE1Enable\":false,\"CE2\":null,\"CE2Enable\":false}]}"

由此可见:表DGGJOneReelNumManagerParamsSettings的对象a的所有属性都是默认值,并没有赋值。

解决方案:

1.直接 select new 匿名实体类

     var query = (from a in db.DGGJOneReelNumManagerParamsSettings
                     join b in db.MesMachineConfig
                         on a.MachineNum equals b.MachineNum
                         join c in db.Site_LineInfo
                             on b.LineNum equals c.LineNum
                     where (baseMachineQuery.LineNum == null ? true : b.LineNum == baseMachineQuery.LineNum)
                           && (baseMachineQuery.MachineNum == null ? true : a.MachineNum == baseMachineQuery.MachineNum)
                     select new DGGJOneReelNumManagerParamsSettingsDto
                     {
                        MachineNum=a.MachineNum,
                        MachineName = b.MachineName,
                        LineNum = b.LineNum,
                        LineName = c.LineName,
                        NG1=a.NG1,
                        NG1Enable = a.NG1Enable,
                        NG2 = a.NG2,
                        NG2Enable = a.NG2Enable,
                        NG3 = a.NG3,
                        NG3Enable = a.NG3Enable,
                        CE1 = a.CE1,
                        CE1Enable = a.CE1Enable,
                        CE2=a.CE2,
                        CE2Enable = a.CE2Enable
                       

                     });

                 var result = await query.ToListAsync();

                 return result;

2.查询出来匿名类型集合以后,通过for循环把查询匿名类型中的其中一个类MapTo单个Dto对象,然后再对单个Dto对象的其他属性赋值。

 var query = await (from a in db.DGGJOneReelNumManagerParamsSettings
     join b in db.MesMachineConfig
         on a.MachineNum equals b.MachineNum
     join c in db.Site_LineInfo
         on b.LineNum equals c.LineNum
     where (baseMachineQuery.LineNum == null ? true : b.LineNum == baseMachineQuery.LineNum)
           && (baseMachineQuery.MachineNum == null ? true : a.MachineNum == baseMachineQuery.MachineNum)
     select new 
     {
       a,
       b,
       c
     }).ToListAsync();

 var result = new List<DGGJOneReelNumManagerParamsSettingsDto>();
 query.ForEach(p =>
 {
     var mapResult = p.a.MapTo<DGGJOneReelNumManagerParamsSettingsDto>();
     mapResult.MachineName = p.b.MachineName;
     mapResult.LineNum = p.b.LineNum;
     mapResult.LineName = p.c.LineName;
     result.Add(mapResult);

 });

 return result;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值