2016-09-22 7 views
0

私は次のような状況があります。この場合、ネストされたオブジェクトを平坦化し、親と子のオブジェクトを作成するのではなく、1行で親と子のフィールドを結合します。ネストされたクラスの照会と結合

また、v1とv2を結合したいと考えています。何かアドバイス?

あなたは次のように実行する必要があり
public class Person 
{ 
    public string idPerson; 
    public string names; 
    private List<Subject> subjects = new List<Subject>(); 
    private List<MedicalRecord> medicalRecords = new List<MedicalRecord>(); 
} 

public class Subject 
{ 
    public string subjectName; 
    public string subjectId; 
} 

public class MedicalRecord 
{ 
    public int recordId; 
    public string doctorName; 
    public string medicalCare; 
} 

void main() 
{ 
    /// Assume that Person is filled. 
    /// How can I join the two lists? 

    List<Person> all = new List<Person>(); 
    var v1 = all.SelectMany(p => p.subjects, (child, parent) => new { child, parent }); 
    var v2 = all.SelectMany(p => p.medicalRecords, (child, parent) => new { child, parent }); /// here i want to select all fields instead of objects to avoid child and parent calling from below cycle. 

    /// I want to join v1 and v2 and flatten the lists. 
    foreach(var obj in v1) 
    { 
     Console.WriteLine(obj.child.subjectName + " " + obj.parent.idPerson); 
    } 

    /// 

} 
+0

ですから、{件名人、MedicalRecord}の平坦化されたリストで終わるしたい、しかし、人は複数の被験者と医療記録を持っています、グループ分けはどのように見えますか?医療記録よりも科目が多い場合、またはその逆の場合はどうなりますか?選択肢はありますか? –

+0

私は、人物ID – jrpz

+0

によって2つのリストに参加して、alフィールドを平らにしたいと思います。まず、すべてのフィールドをとっておきたいので、 'var v2 = all.medicalRecords'を試してみてください。それらを結びつけるために、linqの 'join'を' on v1.idPerson equals v2.idPerson'と使うだけの特別な理由はありますか? –

答えて

0

static void Main(string[] args) 
{ 
    List<Person> all = new List<Person>(); 

    // Estract the flattened list of subjects 
    var subjects = all.SelectMany(p => p.Subjects, (person, subject) => new { person.idPerson, person.names, subject}); 
    // Estract the flattened list of medical records 
    var medicalRecords = all.SelectMany(p => p.MedicalRecords, (person, medicalRecord) => new { person.idPerson, person.names, medicalRecord}); 

    // Join the two lists and create a flattened object 
    var flattenedList = 
     subjects.Join(medicalRecords, 
         s => s.idPerson, 
         m => m.idPerson, 
         (s, m) => new { 
          IdPerson = s.idPerson, 
          Names = s.names, 
          s.subject.SubjectId, 
          s.subject.SubjectName, 
          m.medicalRecord.RecordId, 
          m.medicalRecord.DoctorName, 
          m.medicalRecord.MedicalCare 
         }) 
         .ToList(); 
} 
関連する問題