2017-09-06 23 views
0

我有两个相关的模型,我使用数据对象传输类,所以我从相关模型中添加更多的数据。因为我正在使用DTO,并且由于某些原因,列表未在输出中链接。我需要做什么才能将PatParDto数据加入或插入到PatRegDto DTO的PatPar? 我的DTO是如何使用EF连接两个数据传输对象(DTO)? [编辑]

public class PatRegDto 

    { 
     public string Action { get; set; } 
     private Int64 _FileId; 
     public Int64 FileId 
     { 
      get 
      { 
       return this._FileId; 
      } 
      set 
      { 
       this._FileId = value; 
      } 
     } 
     public string FName { get; set; } 
     public string MName { get; set; } 
     public string LName { get; set; } 
     public string fullname 
     { 
      get { return FName + " " + MName + " " + LName; } 
     } 
     public DateTime Dob { get; set; } 
     public List<PatParDto> PatPar { get; set; } 
    } 
    public class PatParDto 

    { 
     public string Action { get; set; } 
     public long RecId { get; set; } 
     public long FileId { get; set; } 
     public long ParFileId { get; set; } 
     public DateTime SDate { get; set; } 
     public DateTime? EDate { get; set; } 
     public DateTime dob { get; set; } 
     public string FullName { get; set; } 
    } 

我控制器

[HttpGet("{id}")] 
     public async Task<IActionResult> GetPatReg([FromRoute] long id) 
     { 

      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 


      var PatientInfo = await _context.PatReg 
       .Where(a => a.FileId == id) 
       .Select(b=> new PatRegDto 
       { 
        FileId=b.FileId, 
        FName=b.FName, 
        PatPar=b.PatPar.ToList() ////???????? 

       }) 
       .ToListAsync(); 


      var PartnerInfo= await _context.PatPar.Select(m => new PatParDto 
      { 
       RecId = m.RecId, 
       FileId = m.FileId, 
       ParFileId = m.ParFileId, 
       SDate = m.SDate, 
       EDate = m.EDate, 
      }).ToListAsync(); 
      for (int i = 0; i < PartnerInfo.Count; i++) 

      { 

       PartnerInfo[i].FullName = _context.PatReg.Where(a => a.FileId == PartnerInfo[i].ParFileId) 
             .Select(t => new { t.fullname }) 
             .Single().fullname; 
       PartnerInfo[i].dob = _context.PatReg.Where(a => a.FileId == PartnerInfo[i].ParFileId) 
             .Select(t => new { t.Dob }) 
             .Single().Dob; 

       PartnerInfo[i].Action = "Get"; 

      } 


       if (PatientInfo == null) 
      { 
       return NotFound(); 
      } 

      var DataRes = new { 
       sdata = PatientInfo 
      }; 

      return Ok(DataRes); 
     } 

所需的JSON应该像

{ 
    "sdata": { 
     "fileId": 1708010001, 
     "fName": "**", 
     "mName": "**", 
     "lName": "**", 
     "fullname": "***", 
     "dob": "1984-04-26T00:00:00", 
     "patPar": [{ 
       "recId": 2, 
       "fullname": "*****", 
       "fileId": 1708010001, 
       "parFileId": 1708010002, 
       "sDate": "1999-12-12T00:00:00", 
       "eDate": null, 
      }, { 
       "recId": 3, 
       "fullname": "*****", 
       "fileId": 1708010001, 
       "parFileId": 1708010003, 
       "sDate": "1955-12-14T00:00:00", 
       "eDate": null, 
      }] 
    } 
} 
+0

你的问题不是很清楚 - 你想'PatPar'与'PatReg'中的'fullname'字段?或者你想获得所有具有'PatPar'的嵌套集合的'PatReg'? 你描述的第二个,但你的DTO和代码说,第一个 –

+0

实际上,PatPar从启动DTO得到全名,现在我想DTO包含在PatReg – JSON

+0

我添加'test'只是为了演示输出,我需要它在主'JSON'在'一对多'关系 – JSON

回答

0

我为开放给任何改进或建议,我解决了这个问题,如下所示:

用词 解决方案是创建两个DTOs,每个都有自己的数据填充,我需要第二个DTO中的更多信息,所以这需要更多的步骤来获取额外的数据,最后使用共享值加入两个DTO。

代码

public class PatRegDto 

    { 
     public string Action { get; set; } 
     private Int64 _FileId; 
     public Int64 FileId 
     { 
      get 
      { 
       return this._FileId; 
      } 
      set 
      { 
       this._FileId = value; 
      } 
     } 
     public string FName { get; set; } 
     public string MName { get; set; } 
     public string LName { get; set; } 
     public string fullname 
     { 
      get { return FName + " " + MName + " " + LName; } 
     } 
     public DateTime Dob { get; set; } 
     public List<PatParDto> PartnerInfo { get; set; } 
    } 
    public class PatParDto 

    { 
     public string Action { get; set; } 
     public long RecId { get; set; } 
     public long FileId { get; set; } 
     public long ParFileId { get; set; } 
     public DateTime SDate { get; set; } 
     public DateTime? EDate { get; set; } 
     public DateTime dob { get; set; } 
     public string FullName { get; set; } 
    } 

和控制器是

[HttpGet("{id}")] 
    public async Task<IActionResult> GetPatReg([FromRoute] long id) 
    { 

     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     // 1 select Parent Record 
     var PatientInfo = await _context.PatReg 
      .Where(a => a.FileId == id) 
      .Select(b => new PatRegDto 
      { 
       Action = "Get", 
       FileId = b.FileId, 
       FName = b.FName, 
       MName = b.MName, 
       LName = b.LName, 
       Dob = b.Dob, 
      }).ToListAsync(); 
     // 2 select Child Record 
     var PartnerInfo = await _context.PatPar 
     .Where(s=>s.FileId==id) 
     .Select(m => new PatParDto 
     { 
      RecId = m.RecId, 
      FileId = m.FileId, 
      ParFileId = m.ParFileId, 
      SDate = m.SDate, 
      EDate = m.EDate, 
     }).ToListAsync(); 

     // 3 Fetch more data (not in the original model) 
     for (int i = 0; i < PartnerInfo.Count; i++) 

     { 

      PartnerInfo[i].FullName = _context.PatReg.Where(a => a.FileId == PartnerInfo[i].ParFileId) 
            .Select(t => new { t.fullname }) 
            .Single().fullname; 
      PartnerInfo[i].dob = _context.PatReg.Where(a => a.FileId == PartnerInfo[i].ParFileId) 
            .Select(t => new { t.Dob }) 
            .Single().Dob; 

      PartnerInfo[i].Action = "Get"; 

     } 

     // 4 Join parent and child data 
     for (int i = 0; i < PatientInfo.Count; i++) 

     { 

      PatientInfo[i].PartnerInfo = PartnerInfo.Where(a => a.FileId == PartnerInfo[i].FileId).ToList(); 

     } 



     if (PatientInfo == null) 
     { 
      return NotFound(); 
     } 

     var DataRes = new { 
      sdata = PatientInfo 
     }; 

     return Ok(DataRes); 
    } 

输出

{ 
    "sdata": [{ 
     "action": "Get", 
     "fileId": 1708010001, 
     "fName": "*****", 
     "mName": "*****", 
     "lName": "*****", 
     "fullname": "*******", 
     "dob": "1984-04-26T00:00:00", 
     "dateCreated": "2017-09-06T10:50:16.766162Z", 
     "partnerInfo": [{ 
      "action": "Get", 
      "recId": 2, 
      "fileId": 1708010001, 
      "parFileId": 1708010002, 
      "sDate": "1999-12-12T00:00:00", 
      "eDate": null, 
      "dob": "1984-04-26T00:00:00", 
      "fullName": "********" 
     }, { 
      "action": "Get", 
      "recId": 3, 
      "fileId": 1708010001, 
      "parFileId": 1708010003, 
      "sDate": "1955-12-14T00:00:00", 
      "eDate": null, 
      "dob": "1984-04-26T00:00:00", 
      "fullName": "********" 
     }] 
    }] 
} 
相关问题