在ASP.NET中对我的数据进行分组

时间:2012-03-30 07:34:22

标签: 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

2 个答案:

答案 0 :(得分: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

检索数据然后根据需要输出结果......

答案 1 :(得分:0)

有几种方法可以做到这一点:

1)你编写了一个单独的查询,它将结合3个表(使用连接)并返回单个数据集(如Marco建议的那样)。

例如:

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

然后使用can Group Join linq运算符对它们进行分组。  在这种情况下,C#将为您执行连接,而不是sql。

点击此处:http://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9/description#groupjoin

最后,您将在1)获得相同的结果。两者都有优点/缺点。