我有一个表,我需要根据单个表构建一堆嵌套对象。
数据:
PointA PointB月份时间价格 1 2 11 11:00 10.99 1 2 12 11:00 9.99
对象
POINTS {PointA,PointB,Details} 详情{Month,ExtraDetails} ExtraDetails {时间,价格}
我想避免加载循环和if语句,因此应该能够使用linq来执行此操作。但它超出了我的linq经验。
编辑:这些还需要分组
任何帮助都会很棒。
由于
答案 0 :(得分:3)
刚试了一个解决方案:
var nestedObjects = from row in data
select new {row.PointA, row.PointB, Details = new {
row.Month, ExtraDetails = new {
row.Time, row.Price
}
}};
假设您已将数据存入数据。
分组
如果您想将点组合在一起,则需要'分组依据':
var nestedObjects = from row in data
group row by new { row.PointA, row.PointB } into Points
select new {
Points = Points.Key,
Details = from details in Points
select new { row.Month, ExtraDetails = new {
row.Time, row.Price
}}
};
稍微复杂一点 - 当然你也可能希望按月分组,在这种情况下,你需要遵循与Points位相同的模式。注意,这不会创建表,因为group by并不完全这样做,但它至少为您创建了结构。
答案 1 :(得分:0)
假设你为你提到的对象定义了类,并且你有一个或多个构造函数,所以你可以在一行中创建对象,你可以让LINQ查询返回一个POINTS列表。
如果有点喜欢这个:
var res =
from item in table.AsEnumerable()
select new Points(){PointA = item["PointA"];
PointB = item["PointB"];
Details = from item2 in table.AsEnumberable()
where item["PointA"] = item2["PointA"] and item["PointB"] = item2["PointB"]
select new Details(){
month=item2["month"],
extraDetails = from item3 in table.AsEnumerable()...
}
};
最后res将是一个IEnumerable of Points
我很抱歉代码,我不在使用.NET 3.5的计算机上,因此我无法编写正确的可测试查询