2017-02-13 50 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有点生疏,请做相应的调整
相关问题