C# 当数据表不同时,如何使用linq填充复杂模型
当每个源的数据表不同时,如何用linq填充复杂模型,即。 1数据表返回员工,其他表返回部门和地址C# 当数据表不同时,如何使用linq填充复杂模型,c#,linq,C#,Linq,当每个源的数据表不同时,如何用linq填充复杂模型,即。 1数据表返回员工,其他表返回部门和地址 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 L
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;}
}
示例模型如下:
公共类雇员数据
{
公共雇员Emp{get;set;}
}
公营雇员
{
公共字符串EmployeeId{get;set;}
公共字符串EmployeeName{get;set;}
公共列表Dep{get;set;}
}
公共课系
{
公共字符串DepartmentId{get;set;}
公共字符串DepartmentName{get;set;}
公共列表地址{get;set;}
}
公共课堂演讲
{
公共字符串地址{get;set;}
公共字符串City{get;set;}
}
假设datatable2的每个部门地址都有重复的部门ID行
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
,将返回AsEnumerable()
IEnumerable
- 我对数据表有点生疏,请相应调整
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
,将返回AsEnumerable()
IEnumerable
- 我对数据表有点生疏,请相应调整