2009-06-10 65 views
3

我有一个表,我需要基于单个表构建一堆嵌套对象。Linq查询,如何从单个表构建嵌套对象

数据:

点A PointB月份时间价格 1 2 11 11:00 10.99 1 2 12 11:00 9.99

对象是

点{点A,PointB,详细} 详细信息{Month,ExtraDetails} ExtraDetails {Time,Price}

我想避免加载循环和if语句,所以应该可以使用linq 去做这个。但超出了我的Linq体验。

编辑:这些都需要藏汉

分组任何帮助将是巨大的。

感谢

回答

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 
      }} 
    }; 

更复杂一些 - 当然,你可能想组以月份为单位,在这种情况下,您需要遵循与“位”位相同的模式。请注意,这不会创建表格,因为group by不会那么做,但它至少会为您创建结构。

0

假设你得到了你所提到的对象定义你的类,和你有一个构造函数或属性,因此您可以属性格式建立在一个线路的对象,你可以有一个LINQ查询,返回点的列表。

如果会去什么LIK这样的:

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()... 
                 } 
         }; 

在结束资源将是点的IEnumerable的

我的代码对不起,我不是在与.NET 3.5这样一个计算机我不能写一个适当的可测试查询

+0

那么细节对象会进入点对象吗?也将这个群组合在一起,所以没有重复? – 2009-06-10 09:21:47