我在数据库中使用此表
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 :(得分: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)获得相同的结果。两者都有优点/缺点。