Linq查询,如何从单个表构建嵌套对象

时间:2009-06-10 08:47:16

标签: linq

我有一个表,我需要根据单个表构建一堆嵌套对象。

数据:

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经验。

编辑:这些还需要分组

任何帮助都会很棒。

由于

2 个答案:

答案 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的计算机上,因此我无法编写正确的可测试查询