返回单个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;