2017-02-13 28 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和 第二個表具有EmpId,DepartmentId,DepartmentName,AddrOne,City。 – Amit

+0

系地址爲1到多。和員工是一對多的部門。你需要3張桌子 –

回答

0

假設你datatable2有重複DepartmentID的行每個部門的地址

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(), 
    }, 
    }); 

注:

  • 你需要參考上DatTable添加到System.Data.DataSetExtensionsAsEnumerable()這將返回 IEnumerable<DataRow>
  • 我對DataTables有點生疏,請做相應的調整
相關問題