我有一个名为dbRecipes
的数组,其中包含分组的食谱列表。例如, Dinner 组可能有填充鲑鱼,沙拉和土豆泥。甜点组将有一个巧克力熔岩蛋糕。 MMMM。
我需要在分组列表中显示这些食谱,例如:
Group 1:
- Recipe 1
- Recipe 2
Group 2:
- Recipe 3
dbRecipes
中的每个项目都包含一个Group
属性,其中包含有关该组所在的组的信息,以及包含该食谱信息的Recipe
属性。
我想使用LINQ查询迭代整个事情,但我离LINQ专家很远,所以我找到的最好的方法是查询所有不同的组,然后遍历每个组那些。这是我的代码:
var groups = (from g in dbRecipes orderby g.Group.GroupOrder select g.Group).Distinct();
foreach (var g in groups)
{
output.Write("{0}<br/>", g.GroupName);
var recipes = (from r in dbRecipes where r.Group == g orderby r.DisplayOrder select r.Recipe);
foreach(var r in recipes)
{
output.Write("---{0}<br/>", r.Title);
}
}
这似乎工作得相当好,但有没有办法做到这一点,可能更高效,更清洁,或不需要多个查询?谢谢!
答案 0 :(得分:3)
var groups =
from r in dbRecipes
orderby r.DisplayOrder
group r by r.Group into g
orderby g.Key.GroupOrder
select g;
foreach (var g in groups)
{
output.Write("{0}<br/>", g.Key.GroupName);
foreach(var r in g)
{
output.Write("---{0}<br/>", r.Recipe.Title);
}
}
答案 1 :(得分:2)
未经测试,但这是使用GroupBy
的改编:
var groups = dbRecipes.GroupBy(r => r.Group).OrderBy(g => g.Key.GroupOrder);
foreach(var recipeGroup in groups)
{
output.Write("{0}<br/>", recipeGroup.Key.GroupName);
foreach(var recipe in recipeGroup.OrderBy(r => r.DisplayOrder))
{
output.Write("---{0}<br/>", recipe.Recipe.Title);
}
}