【发布时间】:2017-09-05 07:02:42
【问题描述】:
概念
我有两个以一对多关系相关的模型。第一个模型主要存储患者信息(PatReg)。第二个模型加入合作伙伴一起(PatPar)。
即(FileId=1 Sam,FileId=2 Victoria,FileId=3 jessica,FileId=4 monica)信息都存储在PatReg。为了说明 Sam 是 Victoria 和 Jessica 的合作伙伴,我以 PatPar 的方式加入了他们:
FileId= 1 FileId=2
FileId= 1 FileId=3
以下说明了这两种模型。
public class PatReg
{
public Int64 FileId { get; set; }
[Required, Display(Name = "First Name")]
public string FName { get; set; }
[Required, Display(Name = "Middle Name")]
public string MName { get; set; }
[Required, Display(Name = "Last Name")]
public string LName { get; set; }
[Display(Name = "Full Name"), NotMapped]
public string fullname
{
get { return FName + " " + MName + " " + LName; }
}
[Required, Display(Name = "Date of Birth")]
[DataType(DataType.Date)]
public DateTime Dob { get; set; }
public ICollection<PatPar> PatPar { get; set; }
}
public class PatPar
{
[Key]
public Int64 RecId { get; set; }
[Display(Name = "Patient File Id"), Required]
public Int64 FileId { set; get; }
[Display(Name = "Partner File Id"), Required]
public Int64 ParFileId { set; get; }
[Display(Name = "Start Date"), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true), Required]
public DateTime SDate { set; get; }
[Display(Name = "End Date"), DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime? EDate { set; get; }
}
获取相关数据
我在我的项目中使用API controller,查询记录的方式如下,
[HttpGet("{id}")]
public async Task<IActionResult> GetPatReg([FromRoute] long id)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var patReg = await _context.PatReg.SingleOrDefaultAsync(m => m.FileId == id); // here I get my Main Record
var patRegPar = await _context.PatPar // here I get related Records
.Where(m => m.FileId == id)
.ToListAsync();
if (patReg == null)
{
return NotFound();
}
var DataRes = new {
sdata = patReg
};
return Ok(DataRes);
}
生成的JSON
{
"sdata": {
"fileId": 1708010001,
"fName": "Json",
"mName": "S",
"lName": "Makenzi",
"fullname": "Json S Abu Makenzi",
"dob": "1984-04-26T00:00:00",
"patPar": [{
"recId": 2,
"fileId": 1708010001,
"parFileId": 1708010002,
"sDate": "1999-12-12T00:00:00",
"eDate": null,
}, {
"recId": 3,
"fileId": 1708010001,
"parFileId": 1708010003,
"sDate": "1955-12-14T00:00:00",
"eDate": null,
}]
}
}
我希望 patPar 列表的 JSON 输出对于每条记录如下所示,
"patPar": [{
"recId": 2,
"fullname": "Json S Abu Makenzi",
"fileId": 1708010001,
"parFileId": 1708010002,
"sDate": "1999-12-12T00:00:00",
"eDate": null,
}, {
"recId": 3,
"fullname": "Sarah S Maz",
"fileId": 1708010001,
"parFileId": 1708010003,
"sDate": "1955-12-14T00:00:00",
"eDate": null,
}]
问题,
值fullname 存在于主模型PatReg 中,但可以通过链接记录而不是fileId 到fileId、fileId 到parFileId 来读取。
换句话说,我如何在PatPar 中添加fullname 值以及其他值,即使它在模型中不存在?我需要property 吗?
更新说明
我基本上在做三个选择
首先我使用Id从PatReg中选择记录
第二个PatPar 具有相关数据,并且使用相同的Id 被选中
我的问题是 fullname,我需要将它包含在 PatPar 中,但选择不同的键
第三个选择应为PatPar 中的parFileId 到PatReg 中的FileID
等效的 SQL 是
第一个选择:
SELECT FileId, FName, LName, Dob FROM PatReg Where FileId=id
二选三:
SELECT PatReg.FileId, PatReg.FName, PatReg.MName, PatReg.LName, PatPar.EDate, PatPar.ParFileId, PatPar.SDate, PatReg_1.FName AS PFName, PatReg_1.MName AS PMName, PatReg_1.LName AS PLName
FROM PatPar INNER JOIN
PatReg ON PatPar.FileId = PatReg.FileId INNER JOIN
PatReg AS PatReg_1 ON PatPar.ParFileId = PatReg_1.FileId
更新
所需的 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,
}]
}
}
【问题讨论】:
标签: c# json entity-framework