2017-02-13 7 views
1

データテーブルが各ソースごとに異なる場合、linqで複雑なモデルを作成する方法 1データテーブルが返されます。データテーブルが異なるときにlinqを使用して複雑なモデルを作成する方法

Sample Model below: 

Public Class EmployeeData 
{ 
    Public Employee Emp {get;set;} 

} 

Public Class Employee 
{ 
    Public String EmployeeId {get;set;} 
    Public String EmployeeName {get;set;} 
    Public List<Department> Dep {get;set;} 
} 

Public Class Department 
{ 
    Public String DepartmentId {get;set;} 
    Public String DepartmentName {get;set;} 
    Public List<Address> Addr {get;set;} 
} 

Public Class Address 
{ 
    Public String AddrOne {get;set;} 
    Public String City {get;set;} 
} 
+1

データテーブル定義を追加するのを忘れました。そして、あなたはモデルを移植する際にどんな問題がありますか? –

+0

@SergeyBerezovskiy - 最初のテーブルにはEmpId、EmpNameがあり、 2番目のテーブルにはEmpId、DepartmentId、DepartmentName、AddrOne、Cityがあります。 – Amit

+0

部門は住所が1対多数です。従業員は部署と1対1です。ここに3つのテーブルが必要です –

答えて

0

各部署アドレスのDepartmentIdの行を複製し、あなたのdatatable2をしていると仮定すると、

var emps = dataTable1.AsEnumerable().Select(r => new { 
    EmpId = r["EmpId"].ToString(), 
    EmpName = r["EmpName"].ToString(), 
}); 
var depts = dataTable2.AsEnumerable().Select(r => new { 
    EmpId = r["EmpId"].ToString(), 
    DepartmentId = r["DepartmentId"].ToString(), 
    DepartmentName = r["DepartmentName"].ToString(), 
    AddrOne = r["AddrOne"].ToString(), 
    City = r["City"].ToString(), 
}); 
emps 
    .Select(e => new EmployeeData { 
    Emp = new Employee { 
     EmployeeId = e.EmpId, 
     EmployeeName = e.EmpName, 
     Dep = depts.Where(w => w.EmpId == e.EmpId).GroupBy(g => new { 
     DepartmentId = g.DepartmentId, 
     DepartmentName = g.DepartmentName, 
     }) 
     .Select(d => new Department { 
     DepartmentId = d.Key.DepartmentId, 
     DepartmentName = d.Key.DepartmentName, 
     Addr = d.Select(a => new Address { 
      AddrOne = a.AddrOne, 
      City = a.City 
     }).ToList(), 
     }).ToList(), 
    }, 
    }); 

注:

  • はあなたがDatTableAsEnumerable()ためSystem.Data.DataSetExtensions への参照を追加する必要がありますされます返信 IEnumerable<DataRow>
  • 私はDataTablesに少し錆びていますので、それに応じて調整してください
関連する問題