Linq连接而不添加图层

时间:2015-11-13 08:04:35

标签: c# linq

如果我只是像这样使用linq join:

Join(db.opnameadres, 
    afspraak => afspraak.OpnameAdres_idOpnameAdres, 
    opnameadres => opnameadres.idOpnameAdres, 
    (afspraak,opnameadres)=>new {afspraak,opnameadres})

我得到这样的结果:

  {
    "afspraak": {
      "idOpnameAfspraak": 2,
      "OpnameAdres_idOpnameAdres": 459,
      "Starttijd": "08:00:00",
      "Eindtijd": "12:00:00",
      "Opmerkingen": "test",
      "OpnameAfspraakStatus_idOpnameAfspraakStatus": 5,
      "Moment": "2015-10-23T11:54:29+02:00",
      "GebeldDoor": "0318-541206",
      "Datum": "2015-10-26T00:00:00",
      "Contact_idContact": null
    },
    "opnameadres": {
      "idOpnameAdres": 459,
      "Straat": "Hogeveenseweg",
      "Huisnummer": 24,
      "Toevoeging": null,
      "Postcode": "2631PH",
      "Plaats": "Nootdorp",
      "Land": null,
      "OpnameProject_idOpnameProject": 21,
      "ToegevoegdOp": "2015-10-12T16:08:34+02:00",
      "Lon": 4.4096915038546,
      "Lat": 52.0403085252309,
      "RDX": null,
      "RDY": null
    }
  }

我想要的只是这个:

{
  "idOpnameAfspraak": 2,
  "OpnameAdres_idOpnameAdres": 459,
  "Starttijd": "08:00:00",
  "Eindtijd": "12:00:00",
  "Opmerkingen": "test",
  "OpnameAfspraakStatus_idOpnameAfspraakStatus": 5,
  "Moment": "2015-10-23T11:54:29+02:00",
  "GebeldDoor": "0318-541206",
  "Datum": "2015-10-26T00:00:00",
  "Contact_idContact": null
  "idOpnameAdres": 459,
  "Straat": "Hogeveenseweg",
  "Huisnummer": 24,
  "Toevoeging": null,
  "Postcode": "2631PH",
  "Plaats": "Nootdorp",
  "Land": null,
  "OpnameProject_idOpnameProject": 21,
  "ToegevoegdOp": "2015-10-12T16:08:34+02:00",
  "Lon": 4.4096915038546,
  "Lat": 52.0403085252309,
  "RDX": null,
  "RDY": null
}

如何实现这一点,而无需输入每个属性?

1 个答案:

答案 0 :(得分:1)

您应该能够使用反射在afspraak部分中为opnameadresnew的属性合并并返回动态对象:

var propsOpnameadres = typeof(db.opnameadres).GetProperties().ToList();
var propsdAfspraak = typeof(db.afspraak).GetProperties().ToList();

Join(db.opnameadres, 
    afspraak => afspraak.OpnameAdres_idOpnameAdres, 
    opnameadres => opnameadres.idOpnameAdres, 
    (afspraak, opnameadres) => {
    dynamic res = new ExpandoObject();
    propsdAfspraak.ForEach(pp => res[pp.Name] = pp.GetValue(afspraak));
    propsOpnameadres.ForEach(pp => res[pp.Name] = pp.GetValue(opnameadres));                
    return res;
  });