2012-03-30 21 views
0

我在數據庫我的分組數據在ASP.NET

http://i.stack.imgur.com/r7ECj.jpg

我想組數據以這種形式

哈瓦此表------------ 組1 -------------

1.FoodGroupName : Milk 
    a.FoodSubGroup: Milk(type1) 
    1.food 1 
    2.food 2 
    3.food 3 
    4.food 4 
    b.FoodSubGroup: Milk(type2) 
    1.food 1 
    2.food 2 
    3.food 3 
    4.food 4 
    c.FoodSubGroup: Milk(type3) 
    1.food 1 
    2.food 2 
    3.food 3 
    4.food 4 

---------組2 ------------

2.FoodGroupName : Meat 
    a.FoodSubGroup: Meat(type1) 
    1.food 1 
    2.food 2 
    3.food 3 
    4.food 4 
    b.FoodSubGroup: Meat(type2) 
    1.food 1 
    2.food 2 
    3.food 3 
    4.food 4 
    c.FoodSubGroup: Meat(type3) 
    1.food 1 
    2.food 2 
    3.food 3 
    4.food 4 

回答

0

你可以使用這樣的查詢:

SELECT fg.FoodGroupName, fsg.FoodSubGroupName, f.FoodName 
FROM FoodGroups fg 
INNER JOIN FoodSubGroups fsg 
    ON fg.FoodGroupId = fsg.FoodGroupId 
INNER JOIN Foods f 
    ON fsg.FoodSubGroupId = f.FoodSubGroupId 
ORDER BY fg.FoodGroupName, fsg.FoodSubGroupName, f.FoodName 

檢索數據,然後輸出結果,請你......

+0

這應該在sql數據源中,但asp.net中的哪個控件可以動態地實現這一點,並獲得爲特定食品組訂購的所有食品和食品子組。 – Developer 2012-03-30 07:45:15

0

有幾種方法可以做到這樣的事:

1)你寫一個單一的查詢,將結合3表(使用連接)並返回一個單一的數據集(如馬可建議)。

如:

Group   SubGroup Food 
-------------------------------- 
Meat   Meat1  Food 1 
Meat   Meat1  Food 2 
Meat   Meat1  Food 3 
Meat   Meat2  Food 1 
Milk   Milk1  Food 1 
Milk   Milk2  Food 1 

然後用C#代碼,你將它們分組。 使用GroupBy() linq lambda表達式,可以使用很少的代碼行(並高效地執行此操作)。也看看ToLookUp()的擴展。

如果您不熟悉它們,看看這個頁面:

http://code.msdn.microsoft.com/LINQ-to-DataSets-Grouping-c62703ea

最後,你應該得到的對象的集合,可以讓你做到以下幾點:

var groups = ... 

foreach(var group in groups) 
{ 
    //do something with group 
    foreach(var subGroup in group.SubGroups) 
    { 
     //do something with subGroup 
     foreach(var food in subGroup.Foods) 
     { 
      //do something with food 
     } 
    } 
} 

然後,使用嵌套中繼器填充樹視圖或顯示數據非常容易。 2)你編寫獨立的查詢,將單獨查詢每個表。最後,你會得到3個數據集。

Group   
------- 
1 Meat 
2 Milk 

SubGroup 
--------- 
1 1 Meat1 
2 1 Meat2 
3 2 Milk1 
4 2 Milk2 

Food 
---------- 
1 1 Food 1 
2 1 Food 2 
3 1 Food 3 
4 2 Food 1 
5 3 Food 1 
6 4 Food 1 

然後你可以用Group Join linq運算符來對它們進行分組。 在這種情況下,C#將爲您執行連接,而不是sql。

入住這裏:http://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9/description#groupjoin

最終你會得到1相同的結果)。兩者都有優點/缺點。

+0

謝謝你,我會爲此嘗試 – Developer 2012-03-30 08:54:40