2009-06-10 63 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