我有一张桌子(一张桌子)这只是一个例子 - 实时表如此巨大。
DevisionId EmployeeId date Hour
1130107 3011657 2014-10-11 8
1130107 3011657 2014-10-12 1
1130107 3011660 2014-10-11 8
1130107 3011660 2014-10-12 6
我希望将此数据表转换为对象列表列表,请告诉我如何执行此操作的最佳方法。
就像这样的例子
public class Devision
{
public int ID {get;set;}
public List<Employees> Employee {get;set;}
Devision(int id, List<Employees> emp)
{
ID = id;
Employees = emp;
}
}
public class Employees
{
public int ID {get;set;}
public List<Info> Item {get;set;}
Employees(int id, List<Info> info)
{
ID = id;
Item = info;
}
}
public class Info
{
public DateTime Date {get;set;}
public float Hour {get;set;}
Info(DateTime dtime, float hour)
{
Date = dtime;
Hour = hour;
}
}
LINQ可以通过这个对象得到什么,如果你不能查询级别(但是没关系)。
让我们从获得LINQ
之类开始:
var mytab = Table.AsEnumerable();
var itemses =
mytab.Select(
ThankX。
答案 0 :(得分:3)
这应该是你想要的:
List<Devision> devisions = Table.AsEnumerable()
.Select(row => new Devision(
row.Field<int>("DevisionId"),
new Employees(
row.Field<int>("EmployeeId"),
new Info(row.Field<DateTime>("date"), row.Field<float>("Hour")))))
.ToList();
请注意,您的构造函数必须为public
。此外,DataRow.Field
不进行任何转换,您必须提供正确的类型或将值转换为目标类型(或更改表的填充方式)。
现在您已完全更改了问题,您似乎确实希望按DevisionId
和EmployeeId
进行分组,并为每个组初始化List<Employees>
。然后看看:
List<Devision> devisions = Table.AsEnumerable()
.GroupBy(row => new {
EmpID = row.Field<int>("EmployeeId"),
DevID = row.Field<int>("DevisionId")})
.Select(devEmpGroup => new Devision(
devEmpGroup.Key.DevID, devEmpGroup
.Select(row => new Employees(
devEmpGroup.Key.EmpID,
new Info(row.Field<DateTime>("date"), row.Field<float>("Hour"))))
.ToList()))
.ToList();
既然Info
中的Employees
属性也是List<Info>
,那么这应该适合您:
List<Devision> devisions = Table.AsEnumerable()
.GroupBy(row => row.Field<int>("DevisionId"))
.Select(devGrp => new Devision(
devGrp.Key,
devGrp.GroupBy(row => row.Field<int>("EmployeeId"))
.Select(g => new Employees(
g.Key,
g.Select(r => new Info(r.Field<DateTime>("date"), r.Field<float>("Hour")))
.ToList()))
.ToList()))
.ToList();